如何将任何正则表达式应用于 python 中的标记文本 3

How do I apply any regex to my tagged text in python 3

我有一条短信。我将其标记化并删除停用词。然后我在 python 中使用 stanford POS tagger 标记这些词。现在,我正在使用此代码来标记单词并将其写入文件。

tag = nltk.pos_tag(filtered_sentence)
print("tagging the words")
fh = open("Stop_Words.txt", "w+")
for i in range(0,len(filtered_sentence)):
    fh.write((tag[i][0])+" "+(tag[i][1])+"\n")
fh.close()

现在我的文件中有一个类似这样的列表:

paper NN
parallel NN
programming VBG
practical JJ
Greg NNP
Wilson NNP
intended VBD
scientist NN
interested JJ
... A big List ...

我现在要做的是对此应用一些正则表达式来查找特定情况。例如,我想要类似 (JJ*N+) 的东西,这意味着形容词后跟任何名词。我做了 N+ 因为 NN,NNP 等都是名词。

我应该怎么做。我是 clueless.Any 帮助将不胜感激。

如果你只想要 JJ*N,你可以这样做:

import re

text = '''paper NN
parallel NN
programming VBG
practical JJ
Greg NNP
Wilson NNP
intended VBD
scientist NN
interested JJ
'''

pattern = re.compile('\w+? JJ\n\w+ NN.?', re.DOTALL)

result = pattern.findall(text)
print(result)

输出

['practical JJ\nGreg NNP']

说明

模式 '\w+? JJ\n\w+ NN.?' 匹配一组字母 \w+,后跟 space 后跟 JJ 后跟 \n 后跟另一组字母后跟带有 NN 前缀的东西。请注意,我包含了这两个词,因为我认为它可能对您的目的有用。

更新

如果您想要零个或多个形容词 JJ* 后跟一个或多个名词 NN+ 您可以这样做:

import re

text = '''paper NN
parallel NN
programming VBG
practical JJ
Greg NNP
Wilson NNP
intended VBD
scientist NN
interested JJ
'''

pattern = re.compile('(\w+? JJ\n)*(\w+ NN\w?)+', re.DOTALL)

result = pattern.finditer(text)
for element in result:
    print(element.group())
    print('----')

输出

paper NN
----
parallel NN
----
practical JJ
Greg NNP
----
Wilson NNP
----
scientist NN
----