gpt4 book ai didi

python - 从多个列表中的多个元素查找文本文件中的模式?

转载 作者:行者123 更新时间:2023-11-28 22:53:50 27 4
gpt4 key购买 nike

我是初学者,学习 python 几个月是我的第一门编程语言。我正在寻找从文本文件中找到的模式。我的第一次尝试是使用正则表达式,它确实有效但有一个限制:

import re

noun_list = ['bacon', 'cheese', 'eggs', 'milk', 'list', 'dog']
CC_list = ['and', 'or']

noun_list_pattern1 = r'\b\w+\b,\s\b\w+\b,\sand\s\b\w+\b|\b\w+\b,\s\b\w+\b,\sor\s\b\w+\b|\b\w+\b,\s\b\w+\b\sand\s\b\w+\b|\b\w+\b,\s\b\w+\b,\saor\s\b\w+\b'

with open('test_sentence.txt', 'r') as input_f:
read_input = input_f.read()
word = re.findall(noun_list_pattern1, read_input)
for w in word:
print w
else:
pass

所以此时您可能会问为什么这段代码中没有列表,因为它们没有被使用。好吧,我一直在绞尽脑汁,尝试各种 for 循环和函数中的 if 语句来尝试找到复制正则表达式模式的原因,但使用列表。

正则表达式的局限性在于,在 `noun_list_pattern' 中多次出现的 \b\w+\w\ 代码实际上只能找到单词 - 任何单词 - 而不是特定名词。这可能会引起误报。我想通过使用上面列表中的元素而不是正则表达式来进一步缩小范围。

因为我在正则表达式模式中实际上有 4 个不同的正则表达式(它包含 4 个 |),所以我将在这里使用其中的一个。所以我需要找到一种模式,例如:

'noun in noun_list' + ', ' + 'noun in noun_list' + ', ' + 'C in CC_list' + ' ' + 'noun in noun_list

显然,上面引用的代码行不是真正的 python 代码,而是我对所需匹配的想法的表达。我说 noun in noun_list 我的意思是通过 noun_list 进行迭代; C in CC_list是遍历CC_list; , 是逗号和空格的文字字符串匹配。

希望我说清楚了!

这是我正在使用的 test_sentence.txt 文件的内容:

I need to buy are bacon, cheese and eggs. 
I also need to buy milk, cheese, and bacon.
What's your favorite: milk, cheese or eggs.
What's my favorite: milk, bacon, or eggs.

最佳答案

稍微分解一下您的问题。首先,您需要一个模式来匹配您列表中的单词,但不能匹配其他单词。您可以使用交替运算符 | 和文字来完成此操作。例如,red|green|blue 将匹配 "red""green""blue",但不是 "purple"。使用该字符加入名词列表,并添加单词边界元字符和括号以对交替进行分组:

noun_patt = r'\b(' + '|'.join(nouns) + r')\b'

对你的连词列表做同样的事情:

conj_patt = r'\b(' + '|'.join(conjunctions) + r')\b'

您要进行的整体匹配是“一个或多个 noun_patt 匹配,每个可选地后跟一个逗号,然后是 conj_patt 的匹配,然后再匹配一个noun_patt 匹配”。对于正则表达式来说足够简单:

patt = r'({0},? )+{1} {0}'.format(noun_patt, conj_patt)

您并不是真的想使用 re.findall(),而是使用 re.search(),因为您只希望每行匹配一个:

for line in lines:
... print re.search(patt, line).group(0)
...
bacon, cheese and eggs
milk, cheese, and bacon
milk, cheese or eggs
milk, bacon, or eggs

请注意,就解析英语而言,您已经接近(如果不是遇到)正则表达式的限制。任何比这更复杂的东西,您将想要研究实际的解析,也许使用 NLTK。

关于python - 从多个列表中的多个元素查找文本文件中的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18939934/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com