В зависимости от вашего случая, вы, возможно, слишком упрощаете проблему и / или можете приложить немало усилий для реализации функциональных возможностей, которые уже существуют в некоторых библиотеках. Так что это будет не прямой ответ, а предложение о том, какой путь выбрать для решения этой проблемы.
Процесс, который вы хотите реализовать, называется поиск информации . Он очень широкий и сложный, но, к счастью, в этой области много исследований. Часть этого извлекает слово нграмм (нграм - это набор последовательных букв или слов в последовательности).
Позвольте мне показать вам некоторые дополнительные проблемы, о которых вам следует подумать заранее:
- важна ли заглавная буква в слове?
- является ли точка единственным знаком, который Вы хотите использовать для обозначения конца предложения?
- Вы хотите исключить стоп-слов ? Стоп-слова - это слова, которые вы не хотите включать в такие фразы, как «а», «the», «я», «мой» и т. Д.
- Вы хотите стволовых слов? Преобразуйте слова из их первоначальной формы в их корень, как во множественном числе, в форму единственного числа: баскетбол -> баскетбол
И для извлечения чистого текста из HTML:
- извлечь только текст, показанный на странице?
- извлекать подсказки также? (как показано при наведении мышки на картинку)
- Любой другой невидимый текст (метатег и т. Д.)
Существуют библиотеки, которые выполняют поиск и извлечение информации из сырья. «Сырье» означает, что Вам нужно обработать документ (html, doc, pdf, image, ...) и превратить его в текст, чтобы поисковая система могла его проиндексировать (например, извлечь фразы). Как только документ проиндексирован, его можно искать. Одной из таких библиотек для .NET является Lucene.NET . Поддерживаются разные стеммеры, анализаторы, фильтры.
Я не уверен, но я считаю, что есть библиотеки для извлечения текста из html.
По сути, ваш подход может работать в некоторых более простых сценариях, где допустим не столь маленький уровень ошибок. Недавно я заинтересовался поиском информации и нашел ее действительно сложной и интересной. Вы можете получить пользу от изучения этой темы в зависимости от ваших целей. Здесь много информации о стековом потоке, а также об остальном Интернете.
И если вы решите пойти по этому пути, гораздо больше информации о Lucene (оригинальная версия Lucene JAVA, Lucene.NET - это порт для .NET), чем о Lucene.NET. Поэтому, если Вы не нашли ответа на Lucene.NET, немедленно выполните поиск по обсуждению Lucene.