Как выполнить расширение запроса
Я работаю над приложением C#, где пользователь предоставляет набор слов (обычно меньше 10), и мне нужно получить все синонимы этих слов. Я впервые работаю со словарем и прочим. Мне нужно знать, какие шаги необходимо выполнить, и существует ли словарь, содержащий синонимы, которые я могу интегрировать с моим приложением, или есть приложение с открытым исходным кодом или код, который я могу использовать.
2 ответа
Чтобы ответить на ваш первый вопрос. Тезаурус можно найти здесь: http://wordpresscloaker.com/blog/download-free-english-thesaurus-format-txt.html
Я не даю никаких обещаний относительно качества, точности, законности, лицензирования для использования или полноты этого файла. Тем не менее, это поможет вам. Вам нужно извлечь mthesaur.txt и добавить его в папку вашего проекта.
Далее вам необходимо прочитать текстовый файл, выполнив следующие действия:
var reader = new StreamReader(File.OpenRead(@"C:\mthesaur.txt"));
var dict = new Dictionary<string, string>();
while (!reader.EndOfStream)
{
// Read the file line by line.
var line = reader.ReadLine();
// If the line isn't null, we can use it. This shouldn't happen but it is a good sanity check.
if (line == null) continue;
// Split the line by the delimiter (a comma) so we can get the main word, the first one on the line.
var splitLine = line.Split(',');
var mainWord = splitLine[0];
// To save us from having to loop through and only get the indexes above 0 (eg, skip the main word) we will just simply remove it from the line so we have just synonyms.
line = line.Replace(mainWord + ",", string.Empty);
// Now we make use of the dictionary type in C# and add the mainword as the key and the synonyms as the value.
try
{
dict.Add(mainWord, line);
}
catch (ArgumentException argEx)
{
Console.WriteLine("Attempted to add {0} to the dictionary but it already exists.", mainWord);
}
}
Теперь, когда у нас есть все в словаре ключ / значение в C#, вы можете использовать LINQ для запроса синонимов для введенного слова. Это можно сделать, используя раскрывающийся список, содержащий все ключевые значения из словаря (не рекомендуется, так как это будет очень большой раскрывающийся список и трудно ориентироваться для пользователя), ListBox (лучше, проще перемещаться), или текстовое поле поиска. Хотя это не полностью отвечает на ваш вопрос, так как здесь нет ничего о том, как обрабатывать GUI для пользователя, это должно помочь вам в этом.
Если вы используете полнотекстовый поиск SQL или лежащую в основе технологию - Microsoft Search Server (есть бесплатный Express SKU), вы найдете тезаурус для нескольких языков и другие инструменты обработки естественного языка. Я, конечно, предполагаю, что вы работаете над реальным проектом, а не над домашней работой...
Если вы больше знакомы с открытым исходным кодом, посмотрите Lucene.net - он предоставляет поисковую систему, и я уверен, что у него есть тезаурус