Как Word находит совпадающие словоформы в расширенном поиске?

У меня есть текстовый документ, в котором встречаются как «выполнение», так и «производительность». Когда я использую расширенный инструмент поиска в пользовательском интерфейсе Word (цель в конечном итоге перевести его в команду Find.Execute для программного поиска C#), я получаю результаты различий, когда у меня установлен флажок «Сопоставить все формы слов».

Когда я ищу "выполнение", я получаю оба вхождения для "выполнения" и "производительности".
Когда я ищу "производительность", я получаю совпадения только для "производительности", хотя "выполнение" по-прежнему должно зарегистрируйтесь как словоформа для «производительности».

Кто-нибудь знает, как Word использует свой алгоритм поиска или как я могу убедиться, что поиск по «производительности» показывает результаты как для «производительности», так и для «производительности»?

Редактировать (11.07.12 16:34)-
Я провел пару тестовых комбинаций, чтобы посмотреть, смогу ли я найти шаблон для себя, и что ж... это было не так многообещающе (Заглавные буквы имеют значение!?!) .
Документ, из которого были получены эти результаты, представлял собой простой текстовый документ, в котором каждая словоформа использовалась как в верхнем, так и в нижнем регистре. При каждом поиске были найдены версии слова как в верхнем, так и в нижнем регистре.
Вот результаты нескольких поисков и их  очевидные выводы»> (Выполните «Щелкните правой кнопкой мыши-> Открыть изображение в новой вкладке», чтобы увидеть детали полноразмерного изображения) <br>Если кто-нибудь может дать ссылку на документацию, разъясняющую это для меня, я был бы очень признателен!</p>

<p>Редактировать (12.07.12 9:49)-<br>Еще больше грусти: я попытался переключиться с интерфейса внутри Word на команду Find.Execute в C#, и параметр matchSoundsLike не работает так же, как расширенный пользовательский интерфейс.  Поиск функций :( Кажется, что программный флаг matchSoundsLike находит только звуковые формы, которые соответствуют регистру, хотя у меня matchCase явно установлено значение false.</p>
    </div>

    <br>

    <div class=

person Chris W.    schedule 11.07.2012    source источник
comment
Я неправильно понял ваш вопрос, поцарапав свой комментарий. Извини.   -  person derGral    schedule 11.07.2012


Ответы (1)


Похоже, это адаптация расширения запроса, довольно важной области информационного поиска.

Я бы посоветовал не создавать механизм расширения запросов самостоятельно, поскольку это скорее проект для магистерской (или, возможно, докторской) диссертации, чем меньшая функция более крупного проекта. Однако, если вы по-прежнему хотите реализовать эту функцию самостоятельно, я предлагаю вам начать с Поищите в Google Scholar запрос "расширение запроса" и прочитайте о некоторых современных методах.

Что касается ранее существовавших библиотек, большинство пакетов ориентированы на веб-поиск и базы данных, поэтому мне трудно найти что-нибудь для поиска текстовых файлов. В Google Query Expansion прямо не указано, что это расширение для Google API, но у меня такое впечатление. Похоже, Microsoft SQL Server имеет эту встроенную функцию. Существует модуль Apache Lucene, который также реализует это. В MySQL также есть реализация.

Если вы хотите использовать уже существующий пакет, вам, как минимум, потребуется изменить структуру вашей программы так, чтобы текст сохранялся в базе данных. Это превратит вашу проблему из проблемы текстового поиска в проблему поиска по корпусу, которая тщательно изучена и будет иметь больше документации и инструментов из внешних источников. Тем не менее, не зная ваших данных, я не знаю, стоит ли это решение и какую структуру вам следует выбрать.

Удачи. Мне жаль, что я не смог напрямую ответить на ваш вопрос, но я надеюсь, что дал вам несколько хороших источников информации.

person acattle    schedule 12.07.2012
comment
Спасибо за ссылки! Я могу помнить о расширении запроса, но преобразование моих данных в базу данных не кажется полезным, поскольку функция сопоставления словоформ является такой небольшой функцией всей программы. - person Chris W.; 12.07.2012
comment
@КрисВ. Примерно так я и предполагал. Вот почему я сказал, что внедрение собственной системы может быть не очень хорошей идеей. Поиск частичных совпадений, таких как PERFORMance или игнорирование заглавных букв, тривиален (соответственно регулярное выражение и какой-то метод string.toLower(). Я не знаю C#, поэтому не знаю, как называется метод), но поиск основы термина запроса ( то есть выполнять из производительности), а также поиск синонимов и их вариаций будет раздражать для программирования и, вероятно, принесет больше проблем, чем оно того стоит. Извини. - person acattle; 12.07.2012