首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与函数任意和“不止一次”关键字有关的Python编码

与函数任意和“不止一次”关键字有关的Python编码
EN

Stack Overflow用户
提问于 2016-01-05 06:01:00
回答 3查看 140关注 0票数 0

我有一段简单的代码,告诉我给定列表中的一个单词是否出现在一篇文章中:

代码语言:javascript
运行
复制
 if not any(word in article.text for word in keywords):
        print("Skipping article as there is no matching keyword\n")

我需要的是,如果“关键字”列表中至少有3个单词出现在文章中--如果它们没有出现,那么应该跳过这篇文章。

有什么简单的方法吗?我似乎什么都找不到。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-05 06:33:24

如果关键字集足够大,所搜索的字符串足够长,通常值得短路,则其他方法的变化将在找到三次命中时停止(就像any在找到一次命中时停止):

代码语言:javascript
运行
复制
from itertools import islice

if sum(islice((1 for word in keywords if word in article.text), 3)) == 3:

一旦你得到三次点击,它立即停止迭代关键字和测试通过。

票数 2
EN

Stack Overflow用户

发布于 2016-01-05 06:06:29

可以使用此模式计算满足条件的项目数:

代码语言:javascript
运行
复制
sum(1 for x in xs if c(x))

在这里你会这样做:

代码语言:javascript
运行
复制
if sum(1 for word in keywords if word in article.text) >= 3:
    # 
票数 3
EN

Stack Overflow用户

发布于 2016-01-06 02:40:15

我的短信和列表都很长

如果文本很大,并且有许多关键字,那么可以使用Aho-Corasick算法 (如grep -Ff keywords.txt text.txt),例如,如果要查找不重叠的事件,可以使用套餐 (未测试):

代码语言:javascript
运行
复制
#!/usr/bin/env python
from itertools import islice
from noaho import NoAho  # $ pip install noaho

trie = NoAho()
for word in keywords:
    trie.add(word)
found_words = trie.findall_long(article.text)
if len(list(islice(found_words, 3))) == 3:
    print('at least 3 words in the "keywords" list appear in the article')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34605144

复制
相关文章

相似问题

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