Заменить слова в специальную строку, кроме существительных и прилагательных в Python

Я хочу заменить слова (например, глаголы, наречия ...) некоторой специальной строкой (например, "NIL"), кроме прилагательных и существительных.

То есть для текста:

анархизм возник как термин оскорбления, впервые использованный против ранних радикалов рабочего класса

Сначала я использую теги POS (универсальный формат), в результате получается формат с тегами:

анархизм / НЕТ / ГЛАГОЛ как / ADP a / термин DET / СУЩЕСТВЕННОЕ слово / злоупотребление ADP / NOUN first / ADV used / ГЛАГОЛ против / ADP в начале / ADJ работает / NOUN класс / NOUN радикалы / NOUN

и я хочу получить такой текст:

анархизм / NOUN NIL NIL NIL термин / NOUN NIL злоупотребление / NOUN NIL NIL NIL NIL рабочий / NOUN класс / NOUN радикалы / NOUN

которые сохраняют существительные и прилагательные, а другие слова заменяют специальной строкой (например, "NIL").

Есть ли какой-нибудь эффективный способ сделать это в Python, размер моего корпуса может быть 10G +.

Большое спасибо!


person Flora Mitchell    schedule 28.08.2015    source источник


Ответы (2)


Попробуйте разбить строку на каждое слово и проверить, что это за слово:

string = 'anarchism/NOUN originated/VERB as/ADP a/DET term/NOUN of/ADP abuse/NOUN first/ADV used/VERB against/ADP early/ADJ working/NOUN class/NOUN radicals/NOUN'
string = string.split(' ')
temp = ''
for a in string:
    if '/NOUN' in a:
        temp += a + ' '
    else:
        temp += 'NIL '
string = temp
print(string)
person SuperNova    schedule 28.08.2015

Вы также можете использовать это регулярное выражение \w*/(?!NOUN)[A-Z]*

>>> import re
>>> s = "anarchism/NOUN originated/VERB as/ADP a/DET term/NOUN of/ADP abuse/NOUN first/ADV used/VERB against/ADP early/ADJ working/NOUN class/NOUN radicals/NOUN"
>>> re.sub("\w*/(?!NOUN)[A-Z]*","NIL",s)
'anarchism/NOUN NIL NIL NIL term/NOUN NIL abuse/NOUN NIL NIL NIL NIL working/NOUN class/NOUN radicals/NOUN'

Вы можете протестировать его здесь.

person Chaker    schedule 28.08.2015