Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python 3中,如何将任何正则表达式应用于标记文本_Python_Regex_Python 3.x_Nltk_Pos Tagger - Fatal编程技术网

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

在python 3中,如何将任何正则表达式应用于标记文本,python,regex,python-3.x,nltk,pos-tagger,Python,Regex,Python 3.x,Nltk,Pos Tagger,我有一条短信。我将其标记化并删除stopwords。然后我用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][

我有一条短信。我将其标记化并删除stopwords。然后我用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+)的东西,意思是形容词后跟任何名词。因为NN,NNP等都是名词


我该怎么做呢。我不知道。任何帮助都将不胜感激。

如果您只需要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)
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('----')
输出

['practical JJ\nGreg NNP']
paper NN
----
parallel NN
----
practical JJ
Greg NNP
----
Wilson NNP
----
scientist NN
----
解释

模式
“\w+?JJ\n\w+NN.?“
匹配一组字母
\w+
,后跟一个空格,后跟一个
\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.?', re.DOTALL)

result = pattern.findall(text)
print(result)
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('----')
输出

['practical JJ\nGreg NNP']
paper NN
----
parallel NN
----
practical JJ
Greg NNP
----
Wilson NNP
----
scientist NN
----

如果你只想要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)
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('----')
输出

['practical JJ\nGreg NNP']
paper NN
----
parallel NN
----
practical JJ
Greg NNP
----
Wilson NNP
----
scientist NN
----
解释

模式
“\w+?JJ\n\w+NN.?“
匹配一组字母
\w+
,后跟一个空格,后跟一个
\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.?', re.DOTALL)

result = pattern.findall(text)
print(result)
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('----')
输出

['practical JJ\nGreg NNP']
paper NN
----
parallel NN
----
practical JJ
Greg NNP
----
Wilson NNP
----
scientist NN
----


您看过
re
模块了吗?这是一个python正则表达式问题吗?它真的与
ntlk
pos-tagger
有关吗?听起来像是您试图将特定字符串(如
NN
NNP
等)与正则表达式匹配。@timgeb我已经研究了re模块,但我不确定如何将其应用于此问题。我知道我可以用re,试着把它应用到一个句子或什么的。但在我的文件里有一个单词,后面跟着一个标签。我不知道如何在这里使用它。JJ*N+是你想要的唯一模式吗?@DanFarrell我通过标记我的单词从nltk模块得到了结果。我不确定这里是否可以使用相同的模块或与之相关的任何东西。这就是为什么我也标记了nltk。这听起来像是一个正则表达式问题。虽然我是新来的,但如果您能指出我应该贴什么标签,我将不胜感激。我将更改它,以便正确的人能够回答这个问题。您看过
re
模块吗?这是python正则表达式问题吗?它真的与
ntlk
pos-tagger
有关吗?听起来像是您试图将特定字符串(如
NN
NNP
等)与正则表达式匹配。@timgeb我已经研究了re模块,但我不确定如何将其应用于此问题。我知道我可以用re,试着把它应用到一个句子或什么的。但在我的文件里有一个单词,后面跟着一个标签。我不知道如何在这里使用它。JJ*N+是你想要的唯一模式吗?@DanFarrell我通过标记我的单词从nltk模块得到了结果。我不确定这里是否可以使用相同的模块或与之相关的任何东西。这就是为什么我也标记了nltk。这听起来像是一个正则表达式问题。虽然我是新来的,但如果您能指出我应该贴什么标签,我将不胜感激。我会修改它,以便正确的人能回答这个问题。这几乎是正确的。除了它应该给NN+权利。纸NN\n平行NN也应该满足这个权利吗?甚至我也在摆弄这样的正则表达式“(\w+?JJ\n)*”((\w+NN.)+)”。我不知道它是否正确。它给出了“[(“”,'论文NN\n平行NN\n','平行NN\n'),('practical JJ\n','Greg NNP','Greg NNP'),(“”,'Wilson NNP','Wilson NNP'),(“”,'scientist NN\n','scientist NN\n')”作为结果。我觉得我做得很好,但我不能正确地点击它。我在文本示例中运行了该正则表达式,但没有返回
paper NN parallel NN
,事实上它不应该匹配它。你想匹配纸NN平行NN吗?好的,对不起,我不知道。我只是去了一些交互式正则表达式生成器那里试着碰碰运气。无论如何,当我们给出JJ*N+时,N+部分应该正常工作。前两行应该构成输出no?JJ*N+不是有效的Python正则表达式,最接近的是
'JJ.+NN.
我的意思是。我想要这样的东西:“零个或多个形容词后跟一个或多个名词”。我把这句话改成了JJ*N+。这句话我想要一个正则表达式这几乎是正确的。除了它应该给NN+权利。纸NN\n平行NN也应该满足这个权利吗?甚至我也在摆弄这样的正则表达式“(\w+?JJ\n)*”((\w+NN.)+)”。我不知道它是否正确。它给出了“[(“”,'论文NN\n平行NN\n','平行NN\n'),('practical JJ\n','Greg NNP','Greg NNP'),(“”,'Wilson NNP','Wilson NNP'),(“”,'scientist NN\n','scientist NN\n')”作为结果。我觉得我做得很好,但我不能正确地点击它。我在文本示例中运行了该正则表达式,但没有返回
paper NN parallel NN
,事实上它不应该匹配它。你想匹配纸NN平行NN吗?好的,对不起,我不知道。我只是去了一些交互式正则表达式生成器那里试着碰碰运气。无论如何,当我们给出JJ*N+时,N+部分应该正常工作。前两行应该构成输出no?JJ*N+不是有效的Python正则表达式,最接近的是
'JJ.+NN.
我的意思是。我想要这样的东西:“零个或更多的形容词