如何将任何正则表达式应用于 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
----
我有一条短信。我将其标记化并删除停用词。然后我在 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
----