2012-01-09 2 views
1

У меня есть xml с двумя свойствами: word и link. Как заменить слова в тексте на ссылку, используя информацию xml. Ex .: XMLКак преобразовать слова в ссылки?

<word>dog</word> 
<link>http://www.dog.com</link> 

Текст: собака хороша.

Результат: dog приятный.

Результаты ОК.

Проблемы:

1- Если текст содержит слово собак результат incorret, из-за «с».

2- Я протестировал выполнение разбиения по пространству на текст, чтобы исправить это, но если слово составлено как новый год, результат будет интреблем снова.

У кого-нибудь есть предложения по его устранению и устранению этих проблем (множественных и сложных слов)?

Спасибо за помощь.

+2

Вы хотите совместить с собаками, или нет? Если да, вы ставите себе массу неприятностей, так как вскоре вы обнаружите, что единственные и множественные формы - это только начало ... Тем не менее, вы могли бы объяснить свою текущую реализацию? Вы пытались использовать регулярное выражение? – Eilistraee

ответ

-1

Возможно, вам понадобится словарь. Создайте текстовый файл/XML-файл, содержащий как особые, так и множественные формы требуемых слов. Во время выполнения загрузите их в Dictionary<String, String>. Затем найдите в словаре значение <word/> и извлеките его исключительное значение.

3

Вы можете использовать CONTRIB пакет Lucene.Net в Snowball для вытекающих (words ->word, came ->come, having ->have и т.д.). Но вы по-прежнему есть проблемы с соединением слов

0

Если вы выбросили свои собственные решения, я имел хороший успех с возможностями .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 (например, синтаксический анализ строк).

Независимо от подхода, это не будет точная наука.

+0

Кроме того, как увеличить скорость поиска, вы ничего не говорите о том, что происходит. go-> go, критерии-> критерий, did-> do и т. д. –

+0

@ L.B - вы правы, OP спросил о плюрализации и сложных словах ... что-то большее, чем это потребует довольно сложного решения. Я кратко посмотрел на продукт, на который вы связали и поддержали ваш ответ. –

Смежные вопросы