У меня есть вектор предложений, таких как:
example <- c("text text word1 text text word2 text text", ...)
и я пытаюсь определить, какие предложения соответствуют следующим правилам:
- предложение содержит как "слово1", так и "слово2"
- "word1" предшествует "word2"
- между "word1" и "word2" находится от нуля до трех слов
Это можно сделать с помощью обычного регулярного выражения. Однако проблема в том, что "word1" или "word2" могут содержать опечатки (я ожидаю, что расстояние не более 3 для обоих слов вместе). Примерами опечаток могут быть «wrod1», «woord2», «wrd1» и т. Д. Я также хочу сопоставить предложения, содержащие опечатки для этих слов, в пределах ограничения расстояния. Поэтому я пытался использовать agrepl
:
agrepl("(?:.*?)\\bword1\\b(?:\\s(?:\\w+\\s){0,3})\\bword2\\b(?:.*?)", example, fixed=FALSE, max=3)
Однако я считаю, что расстояние рассчитывается для всего предложения, а не только для «word1» и «word2», и поэтому я почти никогда не получу совпадений таким образом. Любые предложения о том, как это исправить, или соглашение об использовании / регулярное выражение не лучший инструмент для решения этой проблемы?
woord2
неcoord2
? Как мы можем идентифицироватьword
экземпляры? Возможным решением было бы, возможно, извлечь пары слов из строки в определенных местах и проверить их с помощьюadist
. - person Wiktor Stribiżew   schedule 17.02.2016TRUE
, поскольку меня интересует контекст предложения. Это означает, что важная информация, которую мне нужно извлечь из этого, заключается в том, что слово 2 идет после слова 1 (с опечатками или без них) в этом предложении и с учетом других ограничений. - person drgxfs   schedule 17.02.2016agrepl("\\bw[or]+d\\d+\\b(?:\\S+\\s+){0,3}\\s+w[or]+d\\d+", example, fixed=FALSE, max=3)
? - person Wiktor Stribiżew   schedule 17.02.2016