У меня есть несколько частей речевых правил, и они срабатывают только в том случае, если просматриваемый текст соответствует правилу. Однако мне любопытно, есть ли способ удалить «любое» слово, которое появляется между фразой, которая иначе вызвала бы правило. Я пытался использовать стоп-слова, но он слишком сильно лишает текст, чтобы правило стало бессмысленным. Вот пример.
Text: I want to attack this player's base.
attack_rule = [
('nn', 'i'),
('vbp', 'want'),
('to', 'to'),
('vb', ('exterminate', 'waste', 'attack', 'shoot'))
]
Текст будет запускать это правило, однако, если текст записан так:
Text2: I f***ing want to attack this player's base.
Text2: I want to f***ing attack this player's base.
Правило не сработает. Так что мне интересно, есть ли способ отфильтровать ругательства / наполнители из текста, которые в противном случае вызвали бы правило? В идеале по позиции.
В настоящее время я использую POS-тэгер nltk. Если есть способ убедиться, что слово не имеет контекстуального влияния на предложение (как превосходная степень), что может показаться намного сложнее. Или просто удалите слово, если оно появляется между текстом, который в противном случае вызвал бы правило.
Я пытался использовать стоп-слова, но, как я уже сказал, оно слишком сильно отфильтровывалось, особенно когда объект предложения был одним из самыхважные части.
He will attack all of them <- Stop words present
he attack <- Filtered stop words