Существующий функционал текстового редактора Word можно расширить за счёт установки надстроек из магазина Microsoft Office. Надстройки внедряются в приложения офисного пакета 2013 и 2016 года, а также в веб-приложения Microsoft Office Online. Внедряясь в офисные приложения по типу расширений браузера, эти надстройки предлагают те или иные дополнительные возможности. Например, в Microsoft Word можно внедрить мини-поисковик Google.
Бесплатная надстройка — Search The Web – это поле поисковика Google, которое отдельной панелью справа встраивается в окно текстового редактора Microsoft Word. В этой же панели отображаются и результаты поиска Google.
Microsoft Word, в принципе, предусматривает возможность поиска информации в Интернете по выделенным в документе словам прямо из контекстного меню. Вот только эта возможность ограничена поиском исключительно в системе Bing, ведь этот поисковик также, как и Word, является детищем Microsoft. Bing, возможно, и неплохой поисковик для англоязычного контента, но вот с информацией на русском языке гораздо лучше работают Яндекс и Google. Поисковая база последнего будет доступна в окне Microsoft Word после внедрения надстройки Search The Web.
Как установить надстройку и работать с поисковиком Google внутри Microsoft Word?
-
Установка надстройки Search The Web
Для добавления надстройки Search The Web необходимо перейти на вкладку инструментов Microsoft Word «Вставка». Кнопка установки надстроек из магазина Microsoft Office в текстовом редакторе Word 2016 и его веб-версии Word Online называется «Надстройки». После её нажатия увидим кнопку «Магазин». Жмём её.
Версия Microsoft Word 2013 содержит кнопку установки надстроек также во вкладке инструментов «Вставка», но называется она «Приложения». После её нажатия станет доступна кнопка «Магазин».
Магазин Microsoft Office откроется в небольшом окошке поверх окна текстового редактора. Среди имеющегося контента надстройку Search The Web проще всего отыскать, воспользовавшись поиском по магазину. Найдя Search The Web, кликаем надстройку.
В следующем окошке жмём «Доверять». Это своеобразная форма установки надстроек из магазина Microsoft Office.
Поле этого в правой части окна Word увидим панель с поисковым полем для ввода ключевых слов.
Ярлык запуска Search The Web для удобства лучше добавить на панель быстрого доступа Microsoft Word. До этого ярлык можно отыскать при нажатии сначала кнопки «Надстройки» («Приложения» для Microsoft Word 2013), затем – кнопки «Мои надстройки». Вызвав на ярлыке Search The Web контекстное меню, получим доступ к опции добавления надстройки на панель быстрого доступа Microsoft Word.
Ярлык Search The Web будет виднеться в числе прочих установленных приложений в общем списке.
-
Как работает Google внутри Microsoft Word
Search The Web – надстройка Google — работает с выделенными в документе словами. Если панель надстройки активна, выделенные в документе слова автоматически появляются в поисковом поле. Что и остаётся сделать вручную, так это нажать кнопку поиска Search.
В результатах выдач на панели справа, как и поисковых системах в окне браузера, увидим превью найденных по ключевому запросу материалов.
Если данных превью недостаточно, можно открыть веб-страницу статьи. Двойной клик по ссылке автоматически откроет статью в окне штатного браузера Windows Internet Explorer.
А в любом другом браузере или приложении ссылку можно открыть, скопировав её с помощью опции контекстного меню «Копировать ярлык».
Загрузка…
Время на прочтение
5 мин
Количество просмотров 208K
Аве Кодер!
В этой статье речь пойдет о крутых инди поисковиках, которые могут составить конкуренцию поисковым гигантам, а также удовлетворить вкусы как утонченного мусьё, так и идейного борца за личную жизнь.
CC Search
ccsearch.creativecommons.org
CC Search заточен под то, чтобы искать материал не обремененный авторскими правами. Так что если ты контент мейкер, особенно начинающий и денег на платные подписки пока нет, а годноты таки хочется, то этот поисковик — то, что надо.
Если нужно изображение для поста в блоге или что-то ещё, то можно смело брать любые материалы из выдачи, не беспокоясь о том, что за тобой придет кто надо с повесткой в суд за нарушение авторских прав.
Работает CC Search довольно прямолинейно: он извлекает результаты с таких платформ, как Brooklyn Museum, Wikimedia и Flickr и отображает результаты, помеченные как материал Creative Commons.
В панели слева можно выбрать тип лицензии по которой будет фильтроваться контент, ну и прочие стандартные фильтры — тип файла, размер, также можно фильтровать по источникам добычи.
SwissCows
swisscows.ch
«Швейцарские коровы» — это уникальный поисковик с милым швейцарским дизайном и запахом сыра. Oн позиционирует себя как семантическую поисковую систему для семейного пользования и использует искусственный интеллект для определения контекста пользовательского запроса.
Они так же гордятся тем, что уважают частную жизнь пользователей, никогда не собирая, не сохраняя и не отслеживая данные. Что ж, надеюсь их защита имеет меньше дыр, чем их сыр.
DuckDuckGo
duckduckgo.com
Поисковик «УткаУткаИди» не собирает и не хранит твои личные данные, по крайней мере так они говорят (кря).
Это означает, что ты можешь спокойно выполнять поиск, не беспокоясь о том, что твой личный ФСБшник узнает, что ты все ещё ищешь адрес того деда мороза, которому рассказывал стишок когда тебе было 9 и почему поиск продолжает выдавать адрес мордовской колонии номер 17.
В любом случае, DuckDuckGo — идеальный выбор для тех, кто хочет сохранить свои привычки просмотра и личную информацию конфиденциальной, если ты понимаешь о чём я.
StartPage
www.startpage.com
StartPage предоставляет ответы от Google, что делает его идеальным выбором для тех, кто предпочитает результаты поиска Google, но не хочет, чтобы их история поиска отслеживалась и сохранялась.
Он также включает в себя генератор URL, прокси-сервис и поддержку HTTPS.
Генератор URL особенно полезен, потому что он устраняет необходимость собирать куки.
Вместо этого он запоминает настройки таким образом, чтобы обеспечить конфиденциальность.
SearchEncrypt
www.searchencrypt.com/home
SearchEncrypt — это поисковая система, которая использует локальное шифрование для обеспечения конфиденциальности запросов.
Информация для реальных ценителей — поисковик использует комбинацию методов шифрования, которые включают шифрование Secure Sockets Layer и шифрование AES-256.
Когда ты вводишь запрос, Search Encrypt извлекает результаты из своей сети партнёров по поиску и передает запрашиваемую информацию.
Интересная особенность Search Encrypt заключается в том, что после 30 минут бездействия, твои поисковые запросы и настройки обнуляются, поэтому никто не узнает что ты там искал, печатая одной рукой.
Search Encrypt — Выбор настоящего параноика.
Gibiru
gibiru.com
Календарь Майя предсказывал столкновение Земли с планетой Нибиру, но в итоге Земля столкнулась с Gibiru.
Встречайте — приватный поиск, нефильтрованное. По заверениям создателей — абсолютно анонимный поиск без куков, ретаргетинга, и перепродажи личных данных.
Все их доходы генерируются через сбор комиссии, когда пользователи покупают или продают через их поисковик. Также имеется мобильный аналог — приложение Wormhole и ExpressVPN, видимо, от их друганов.
OneSearch
www.onesearch.com
В январе 2020 года Verizon Media, так называется подразделение Verizon Communications, то есть Bell Corporation, после того, как её раскололи и перекрасили — запустила поисковую систему OneSearch, ориентированную на конфиденциальность.
Они заявляют что в их поисковике:
Нет отслеживания файлов cookie, ретаргетинга или личного профилирования.
Нет обмена персональными данными с рекламодателями.
Нет хранения истории поиска пользователей.
Но есть:
Беспристрастные, нефильтрованные и зашифрованные результаты поиска.
По сути, это еще один поисковик, пытающийся позиционировать себя не похожим на Google, тот в свою очередь не скрывает что проводит сбор данных, однако, что твориться в OneSearch на самом деле — неизвестно.
Wiki.com
wiki.com
Это поисковой агрегатор, выуживающий информацию с википедии и с тысяч различных wiki по всему интернету.
Как по мне, то выглядит достаточно криво и небезопасно. Но если в тебе жив дух коммунны википедии, ты уже занёс пожертвование её создателю и добавил последние правки в статью про канцелярскую скрепку, то возможно тебе зайдёт и это. Ну или если твою жену зовут Вика.
Boardreader
boardreader.com
Если посреди ночи ты не можешь уснуть оттого, что наконец придумал, что бы ты ответил тому засранцу на форуме по арктическим пингвинам 5 лет назад, то этот поисковик поможет тебе разыскать нужную ветку, ведь ищет он как раз по различным форумам, бордам и ответам мейл.ру.
Как известно, люди не всегда сдержаны в общении между собой, особенно в интернете, так что если тебе вздумалось найти примеры эпичнейших боев по переписке уважаемых и не только граждан, то этот поисковик готов копаться в интернет-отходах после срачей в комментах.
giveWater
www.givewater.com
Пока Джеф Безос наслаждается званием человека, собравшего больше всех нулей на своем банковском счету, два хипана из Нью Йорка сделали «дайВоду» — поисковик, который они сами описывают как «социально значимый».
Итак, как он работает:
Ты используешь giveWater, для поиска, к примеру, материала для своего диплома.
Платные поисковые объявления генерируют доход для giveWater.
giveWater распределяет прибыль от этих объявлений между своими партнерами — благотворительными фондами
Фонды используют пожертвованные средства для обеспечения чистой водой.
Ecosia
www.ecosia.org
Поисковик из Германии, который отдает 80% своих доходов на посадку деревьев и работающий по схожему с giveWater принципу, ставя социально значимые проекты на первое место перед прибылью для акционеров и инвесторов.
Когда в 2019 PornHub пообещал начать сажать деревья за просмотры видео, пользователи незамедлительно предложили открывать PornHub в Ecosia, дабы озеленить планету с ещё большей скоростью. Как говорится: «ствол за ствол».
Ekoru
www.ekoru.org
Еще один озеленительный проект, который утверждает, что их сервера также работают на зеленой энергии.
Ekoru использует доходы для очистки океана, предотвращения гибели лесов и изменения климата в худшую сторону. А также дает прохладу, влажность и, скорее всего, силу земли.
Slideshare
www.slideshare.net
Не совсем отдельный поисковик, скорее фича платформы LinkedIn, с помощью которого можно искать, внезапно — слайды и презентации. Так что, бери бизнес ланч и врубай яппи-диафильм про то, как менялись предпочтения населения Среднего Запада относительно сухих завтраков.
Wayback Machine
archive.org
Он же — интернет архив. Хочешь узнать, не был ли сегодняшний божий одуванчик в прошлом злым бармалеем, пытающимся замести следы, или просто ностальгируешь по тому, что любимый сайт выглядел раньше не то, что сейчас?
Тогда тебе сюда. Этот поисковик делает снимки интернет ресурсов в определенный момент времени, в которое ты и можешь отправиться.
У Ясеня
уясеня.рф
Как известно, настоящие мужики не пользуются гуглом, они спрашивают у ясеня. Но поскольку неспешные беседы с деревом могут перерасти в поездку в тихое место с мягкими стенами, артель, по всей видимости, православных разработчиков создала былинный поисковик уясеня.рф
К сожалению Ясень в основном качает головой и не выдает реальные результаты, дерево все-таки.
Здесь также можно найти некий яснослов, который позволяет… яснословить. А именно складывать новые великолепные слова на основе существующих.
Например, можно спросить у Ясеня имя своего будущего чада и сказочный пилматериал съяснословит что-то вроде «Енотия».
Судя по дизайну, пилили его пока у авторов не выветрилась брага.
Но мы желаем творцам плодотворного труда, дабы порадовать люд православный новыми поделками скоморошными, например, подсчет годочков бытия с помощью кукушки.
Пиши в комментариях свои личные предпочтения или если я упустил кого-то достойного внимания. Аве!
- Download demo project — 389 Kb
- Download demo Trivial DB file- 1.38 Kb
- Download source — 111 Kb
Introduction
If you need a word search engine for your website or for your application, you must create it, or send your data to One Internet Search engine and send money for indexing your site, but this application can index your text/HTML/ASP files and save the words in its database to search in future.
This application use the SQLite database as its DBMS. This is an Open Source DBMS, and can be used freely. For more information, you can visit this site.
For connecting from .NET code to SQLite, use the .NET wrapper from Finisar Corporation. This wrapper makes the ADO.NET libraries for SQLite, and it is very user-friendly. Its DLL can be download from SourceForge.
using Finisar.SQLite;
Database
You can see the E/R chain diagram of the database in this picture:
This diagram has a relation m<-> n, this relation should be converted to a table (index table) named Word_Page.
Create database (class DBWSE)
I think an application is complete if it can create database in code and its executable file does not include an empty database. For creating the required database, we can use the CREATE
SQL commands.
private void CreateDataBase(string path) { try { FileStream fi = File.Create(path); fi.Close(); DBFile = path; OpenDataBase(); string strSQL = "Create Table words (" + "WID INTEGER PRIMARY KEY ," + "Word NVarChar(50)" + ")"; SQLiteCommand sqd = new SQLiteCommand(strSQL, sqconn); sqd.ExecuteNonQuery(); sqd.CommandText ="Create Table pages(" + "PID INTEGER PRIMARY KEY ," + "path NVarChar(100) NOT NULL," + "nofw INTEGER NOT NULL," + "Date_add NVARChar(10) NOT NULL" + ")"; sqd.ExecuteNonQuery(); sqd.CommandText ="Create Table word_page(" + "WID INTEGER FORIGEN KEY REFERENCES words (wid)," + "PID INTEGER FORIGEN KEY REFERENCES pages (pid)," + "QTY INTEGER NOT NULL," + "PRIMARY KEY (WID,PID)" + ")"; sqd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } }
This function creates an empty database with this file.
Add to Word, Page, and Word_Page tables
Now we must send data to the database to be saved. I think to get more speed, we must use SQL commands; this means, «we must use SQL INSERT
commands».
public int AddPage(string path, int nofw) { int i = PID(path); if (i < 0) { string strSQL = "INSERT INTO pages (path,nofw,Date_add)" + "VALUES ('" + path + "'," + nofw + ",'" + DateTime.Now.ToShortDateString() + "')"; SQLiteCommand sqc = new SQLiteCommand(strSQL, sqconn); sqc.CommandText = strSQL; sqc.ExecuteNonQuery(); i = PID(path); } return i; }
Next function calls the «PID function» to find the PID (page ID) of the new page. Moreover, now we add this page data to the database.
private int createWord(string word) { string strsql = "INSERT INTO words (word) VALUES ('" + word + "')"; SQLiteCommand sqc = new SQLiteCommand(strsql, sqconn); sqc.ExecuteNonQuery(); return WID(word); }
This function adds a word to the «Word» table.
public void AddWord(int page, string word, int QTY) { int i = WID(word); if (i < 0) i = createWord(word); string strsql = "INSERT INTO word_page (WID,PID,QTY) VALUES " + "(" + i.ToString() + "," + page.ToString() + "," + QTY.ToString() + ")"; SQLiteCommand sqc = new SQLiteCommand(strsql, sqconn); sqc.ExecuteNonQuery(); }
In this solution, a word cannot be repeated. For this, check if WID
finds a word, if yes, return the ID of the word, otherwise return -1. Moreover, we must add the word to the Words table. In fact, this function saves the index of the page without repeating any of data.
Search in the database
Now, we can search the database for our word.
public DataTable SearchWord(string word) { string strSQL = "SELECT pages.path,pages.nofw,pages.Date_add,word_page.QTY " + "FROM words INNER JOIN word_page ON words.wid=word_page.wid" + " INNER JOIN pages ON word_page.pid=pages.pid" + " WHERE words.word='"+word+"'"; SQLiteDataAdapter sqd = new SQLiteDataAdapter(strSQL, sqconn); DataTable dt = new DataTable(); sqd.Fill(dt); return dt; }
This function returns a DataTable
for use in our application.
Create data for saving in the database (index pages)
Now, you have a good database to save pages and its words, but you must create data for this database. This means that you must index the pages!
Initially, this work would be very easy! Because, you can divide a paragraph to words using a splitter. An example is: space , ‘,’ , ‘)’ , ‘(‘ , ‘[‘ ,» and etc., but this solution cannot be very precise.
You must remove trivial and repetitive words, and then you should start indexing.
Split paragraphs
string[] split = words.Split (new Char[] { ' ', ',', '.', ':',';','{','}','[', ']','(',')',''','"','\','<','>','=','+','-','/','*','#','&','%','^', '`','~','0','1','2','3','4','5','6','7','8','9' });
Create a list of words (class ScanFile)
private void StartMonitoring(string p) { StreamReader stR = File.OpenText(p); string words = stR.ReadToEnd(); stR.Close(); string[] split = words.Split(new Char[] { ' ', ',', '.', ':',';','{','}','[', ']','(',')',''','"','\','<','>','=','+','-','/','*','#','&','%','^', '`','~','0','1','2','3','4','5','6','7','8','9' }); max = split.Length; int index; int k = 0; list1.Clear(); for (int i = 0; i < split.Length; i++) { WordInfo word = new WordInfo(); word.Word = split[i].Trim(); if (word.Word.Length > 2) { SearchableWord = word.Word; index = list1.FindIndex(HaveWord); if (index < 0) { word++; list1.Add(word); k++; } else { list1[index]++; k++; } } OnProgress(System.EventArgs.Empty); } total = k; } private static bool HaveWord(WordInfo str) { if (str.Word.ToUpper() == SearchableWord.ToUpper()) return true; else return false; }
In the function, I use the WordInfo
class and the List <Word>
class, and create a new event «OnProgress
» to use when scanning files.
SCF.Progress += new EventHandler(SCF_Progress);
To find a word in List
, we must define a delegate:
private static bool HaveWord(WordInfo str)
However, we cannot find a word by this argument. To solve the problem, I used a private variable for comparing strings:
private static string SearchableWord;
Trivial word (class RepluseTrivial)
To Repulse Trivial words, you must have a list of those words. I think by saving the words in the database, we can quickly access the target word by using a SQL command. For this, create a table of trivial words using a SQL command and insert/delete trivial words in this table using SQL commands.
When creating an object of the RepluseTrivial
class, you must send a list of words to this object and call the Repulse
function to remove the trivial word.
public void Repluse() { List<WordInfo> temp = new List<WordInfo>(); for (int i = 0; i < list1.Count; i++) if (!IsTrivial(list1[i].Word)) temp.Add(list1[i]); list1 = temp; }
This function calls the IsTrivial
function to checks for trivial words.
Using the Code
Now you have a list of non-trivial words and a good database to save these words by using the said algorithm, so search by the «search function». However, this function can be developed as an engine that can quietly search such as the Google engine and Microsoft engine etc. (but not equal in performance).
We can show the progress using a progress bar:
public Form1() { InitializeComponent(); SCF = new ScanFile(); SCF.Progress += new EventHandler(SCF_Progress); } void SCF_Progress(object sender, EventArgs e) { progressBar1.Maximum = SCF.MaxProgress; progressBar1.Value++; }
To create a list of non-trivial words:
private void button2_Click(object sender, EventArgs e) { progressBar1.Value = 0; SCF.Scan(textBox1.Text); label2.Text = "Total Word:"+SCF.Total.ToString(); List<WordInfo> list1=new List<WordInfo>(); list1 = SCF.WordList; string str = Path.GetDirectoryName(Application.ExecutablePath)+ "\Trivial.db3"; RepluseTrivial rt = new RepluseTrivial(str); list1 = rt.Repluse(list1); listView1.Items.Clear(); for (int i = 0; i < list1.Count; i++) { ListViewItem li = new ListViewItem(new string[] { i.ToString(), list1[i].Count.ToString(), list1[i].Word }); listView1.Items.Add(li); } }
Now save the list to the database:
private void button3_Click(object sender, EventArgs e) { string str = Path.GetDirectoryName(Application.ExecutablePath); DBWSE db = new DBWSE(str+""\WSEDB.db3"); int i=db.AddPage(textBox1.Text,SCF.Total); progressBar1.Maximum = SCF.WordList.Count; progressBar1.Value = 0; for (int j=0;j<SCF.WordList.Count;j++) { db.AddWord(i, SCF.WordList[j].Word, SCF.WordList[j].Count); progressBar1.Value++; } }
You can search and show the results in a DataGridView
very easily:
private void button7_Click(object sender, EventArgs e) { string str = Path.GetDirectoryName(Application.ExecutablePath); DBWSE db = new DBWSE(str + "\WSEDB.db3"); dataGridView2.DataSource = db.SearchWord(textBox3.Text); }
I am Mohsen Ahmadian,
I was born in Tehran (capital city of Iran), I live in Vienna
I am a freelancer and a web developer
I Love Codeproject and C++, Java, C#, PHP
if you found my articles are good, buy a coffee for me
https://www.buymeacoffee.com/mohsenahmadian