首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的布尔搜索文本文件

Python中的布尔搜索文本文件
EN

Stack Overflow用户
提问于 2016-01-26 11:12:47
回答 3查看 939关注 0票数 3

我有一个包含32篇文章的文本文件。每一篇文章都以表达式<Number> of 32 DOCUMENTS开头,例如:1 of 32 DOCUMENTS2 of 32 DOCUMENTS等。为了查找每一篇文章,我使用了以下代码:

代码语言:javascript
复制
import re 
sections = [] 
current = []
with open("Aberdeen2005.txt") as f:
    for line in f:
        if re.search(r"(?i)\d+ of \d+ DOCUMENTS", line):        
           sections.append("".join(current))
           current = [line]
        else:
           current.append(line)

print(len(sections)) 

现在,文章由表达式sections表示。

我想做的下一件事,是把文章分成两个组。包含以下文字的文章:经济或经济不确定或不确定或不确定和税收或政策,与数字1相同。

而那些包含以下文字的文章:经济或经济和不确定或管制或支出,与数字2相同。这是我迄今所尝试的:

代码语言:javascript
复制
for i in range(len(sections)):
group1 = re.search(r"+[economic|economy].+[uncertainty|uncertain].+[tax|policy]", , sections[i])
group2 = re.search(r"+[economic|economy].+[uncertainty|uncertain].+[regulation|spending]", , sections[i])

然而,这似乎不起作用。知道为什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-26 13:34:20

这有点冗长,但是您可以在这里不使用正则表达式,例如:

代码语言:javascript
复制
# Take a lowercase copy for comparisons
s = sections[i].lower()
if (('economic' in s or 'economy' in s) and
    ('uncertainty' in s or 'uncertain' in s) and
    ('tax' in s or 'policy' in s)):
    do_stuff()
票数 2
EN

Stack Overflow用户

发布于 2016-01-26 17:39:03

可以将它写成一个正则表达式,但这有点棘手。对于每个and,您将使用一个零宽度的前瞻性断言(?= ),对于每个or,您将使用一个分支。此外,我们还必须使用\b作为单词边界。我们将使用re.match而不是re.search

代码语言:javascript
复制
belongs_to_group1 = bool(re.match(
     r'(?=.*\b(?:economic|economy)\b)'
     r'(?=.*\b(?:uncertain|uncertainty)\b)'
     r'(?=.*\b(?:tax|policy)\b)', text, re.I))

因此,不太容易读。

一个更有成效的方法是找出所有的单词,并把它们放在一个集合中。

代码语言:javascript
复制
words = set(re.findall(r'\w+', text.lower()))
belongs_to_group1 = (('uncertainty' in words or 'uncertain' in words)
    and ('economic' in words or 'economy' in words)
    and ('tax' in words or 'policy' in words))
票数 2
EN

Stack Overflow用户

发布于 2016-01-26 12:07:47

您可以使用re.search查找这些单词。然后,您可以使用if语句以及python的andor语句作为逻辑,然后将第一组和第二组存储为两个列表,并以节索引号作为值。

您可能需要注意的一点是,您的逻辑可能需要括号。

通过

经济或经济与不确定性或不确定性与税收政策

我猜你是说

(经济或经济)和(不确定性或不确定性)和(税收或政策)

与(例如)不同的

经济或(经济和不确定性)或(不确定和税收)或政策

EDIT1: Python将计算从左到右不带括号的语句,即:

(((经济或经济)和不确定性)或不确定)和税收)或政策)

我想这不是您想要的(例如,如果上面包含了策略这个词,那么上面的结果就是true,但是其他的都不包含)。

EDIT2:正如在评论中指出的那样,EDIT1是不正确的,虽然您仍然需要括号才能实现案例1,但是如果没有它们,您将得到案例2(而案例3是一堆垃圾)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35012507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档