Могу ли я объявить предпочтение над соответствующими терминами в регулярном выражении? - PullRequest
1 голос
/ 21 января 2012

Есть ли способ объявить предпочтение в регулярном выражении?
Например, предположим, у меня есть следующие термины для поиска:

cat eats mouse

И у меня есть следующий текст:

I saw yesterday a big mouse in our house. Why? We have a cat!A cat eats mouse.Right?

Мне нужно регулярное выражение, соответствующее разделу, а именно разделу A cat eats mouse.
То есть хотя термины существуют в других частях, это предложение лучше соответствует, то есть предпочтительнее.

Но если бы эта часть отсутствовала, она бы соответствовала I saw yesterday a big mouse in our house. Или We have a cat.

Можно ли это выразить регулярным выражением?

Ответы [ 3 ]

3 голосов
/ 21 января 2012

Нет, регулярное выражение не является подходящим инструментом для этого.

Вы можете использовать регулярное выражение (хотя поиск простой подстроки может быть более подходящим), чтобы найти каждое из слов, которые вы ищете, иприсваивать веса совпадениям (на основе количества вхождений каждого термина, появления всех терминов, относительного порядка терминов ...) за пределами регулярного выражения.

Но ваша конечная цель слишком размыта, а не достаточно регулярных - вам нужно больше, чем просто регулярные выражения.

2 голосов
/ 21 января 2012

Регулярные выражения в основном для соответствия слов регулярных языков, в большинстве контекстов программирования части подобного слова затем извлекаются и используются в программе. Тем не менее, ваш шаблон сопоставления является контекстно-зависимым (средство сопоставления должно как помнить, что было раньше, так и что будет дальше) и, следовательно, не обладать силой выражения регулярных выражений.

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

2 голосов
/ 21 января 2012

Я не уверен, какой тип шаблона вы хотите применить, но учтите, что при использовании вертикальной черты для написания альтернатив первая, соответствующая, будет успешной. Это означает, что если у вас есть что-то вроде (<pattern1>|<pattern2>), если оба они совпадают, предпочтение будет отдано <pattern1>, так как это будет первое, которое будет проверено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...