Рассмотрим следующую строку с тегом POS:
It/PRP was/VBD not/RB okay/JJ or/CC funny/JJ and/CC I/NN will/MD never/RB buy/VB
from/IN them/PRP ever/RB again/RB
(It was not okay or funny and I will never buy from them ever again)
Я хочу сделать следующее:
- Проверка на отрицание наречий (RB) по отношению к определенному массиву («не», «никогда»)
- Когда есть совпадение, уберите наречие
- объединяет "не-" с началом каждого последующего прилагательного (JJ), наречий (RB) или глагола (VB или VBN для прошедшего времени)
- Удалить все POS-теги (/ XX)
Таким образом, желаемый результат будет:
It was not-okay or not-funny and I will not-buy from them not-ever not-again
Моей первой мыслью было сделать это так, как я знаю: взорвать строку в пространстве, затем взорвать каждое слово в «/» на [JJ => окей], а затем сделать оператор switch для обработки каждого слова JJ: объединение и т. Д.), Но это кажется очень неаккуратным. У кого-нибудь есть более чистый и / или эффективный способ сделать это, например, регулярное выражение? Строки предварительно очищены, поэтому они всегда будут содержать только слова (без знаков препинания, другие символы, кроме a-z и т. Д.).
Редактировать: Между прочим, я осознаю очень простой характер этого способа лечения отрицаний, но он достаточно хорош для того, что мне нужно. Будет ошибка, но это нормально:)