将单词替换为特殊字符串,但Python中的名词和形容词除外

时间:2015-08-28 06:10:36

标签: python nltk text-mining pos-tagger

我想将单词(例如,动词,副词......)替换为除形容词和名词之外的一些特殊字符串(例如,“NIL”)。

也就是说,对于文本:

  无政府主义起源于首先用于反对早期工人阶级激进的滥用术语

我首先进行POS标记(通用格式),从而产生标记格式:

  无政府主义/ NOUN起源/ VERB为/ ADP a / DET术语/ NOUN / ADP滥用/ NOUN第一/ ADV使用/ VERB对/ ADP早期/ ADJ工作/ NOUN类/ NOUN激进/ NOUN

我希望得到这样的文字:

  无政府主义/ NOUN NIL NIL NIL NIL / NOUN NIL滥用/ NOUN NIL NIL NIL NIL工作/ NOUN类/ NOUN激进/ NOUN

保留名词和形容词,同时用特殊字符串替换其他单词(如“NIL”)。

在Python中有没有一种有效的方法,我的语料库大小可能是10G +。

非常感谢!

2 个答案:

答案 0 :(得分:2)

您也可以使用此正则表达式\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'

您可以对其进行测试here

答案 1 :(得分:1)

尝试将字符串拆分为每个单词,并检查它是什么类型的单词:

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)