Если вы выбросили свои собственные решения, я имел хороший успех с возможностями .NET плюрализация:
http://msdn.microsoft.com/en-us/library/system.data.entity.design.pluralizationservices.pluralizationservice.aspx
По существу, вы можете передать слово в его множественную форму и получить сингулярную версию и наоборот.
Это может быть довольно интенсивным в зависимости от того, как часто изменяется контент, т. Е. Это не будет хорошим выбором для поиска тысяч слов в реальном времени.
Предполагая, что вы можете предварительно обработать/кэшировать результаты или что исходный файл мал, вы можете:
Run После
Определение всех кандидатов слова из исходного файла.
Разбирайте/разделяйте фразы и передавайте их через библиотеки множественности, чтобы определить их множественные копии.
Сгенерировать (и прекомпилировать) простые регулярные выражения, чтобы найти слова, которые вы do хотите совместить.Например, если вы хотите совместить «собака», но не «собаки», вы можете создать регулярное выражение, например dog[^s]
, которое затем может быть выполнено против текста.
Run Всякий раз, когда поиск/замена Нужен
- Выполнить свой список исходных выражений против рассматриваемого текста. Я бы предложил упорядочить выражения от кратчайшего до самого длинного (иначе короткое выражение может заменить слово, которое было просто проанализировано более длинным выражением).
Опять же, это будет интенсивный процессор для работы в режиме реального времени (большинство решений будут). Как всегда, если вы разбираете HTML, вы должны использовать парсер HTML, а не регулярное выражение. В этом случае вы можете использовать правильный парсер для поиска всех текстовых узлов, а затем выполнить поиск/замену на них.
Альтернативным решением было бы разместить текст и список ключевых слов в базе данных и использовать SQL Server Full Text Indexing, который имеет тенденцию быть довольно умным в отношении этих вещей и поддерживает интеллектуальные предикаты соответствия. Вы даже можете объединить это с хранимой процедурой CLR, чтобы обрабатывать вещи, которые выделяются .NET (например, синтаксический анализ строк).
Независимо от подхода, это не будет точная наука.
Вы хотите совместить с собаками, или нет? Если да, вы ставите себе массу неприятностей, так как вскоре вы обнаружите, что единственные и множественные формы - это только начало ... Тем не менее, вы могли бы объяснить свою текущую реализацию? Вы пытались использовать регулярное выражение? – Eilistraee