Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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 检查列表中的单词是否在另一个列表的字符串中_Python_String_List_Conditional Statements_Any - Fatal编程技术网

Python 检查列表中的单词是否在另一个列表的字符串中

Python 检查列表中的单词是否在另一个列表的字符串中,python,string,list,conditional-statements,any,Python,String,List,Conditional Statements,Any,所以我试着获取《纽约时报》主页的所有标题,想看看某个词被提到了多少次。在这个特殊的案例中,我想看看有多少标题提到了冠状病毒或特朗普。这是我的代码,但它不会工作,因为“number”仍然是我在while循环之前给出的整数 import requests from bs4 import BeautifulSoup url = 'https://www.nytimes.com' r = requests.get(url) soup = BeautifulSoup(r.text, "html.pars

所以我试着获取《纽约时报》主页的所有标题,想看看某个词被提到了多少次。在这个特殊的案例中,我想看看有多少标题提到了冠状病毒或特朗普。这是我的代码,但它不会工作,因为“number”仍然是我在while循环之前给出的整数

import requests
from bs4 import BeautifulSoup

url = 'https://www.nytimes.com'
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")
a = soup.findAll("h2", class_="esl82me0")

for story_heading in a:
    print(story_heading.contents[0])

lijst = ["trump", "Trump", "Corona", "COVID", "virus", "Virus", "Coronavirus", "COVID-19"]
number = 0
run = 0

while run < len(a)+1:
    run += 1
     if any(lijst in s for s in a)
        number += 1

print("\nTrump or the Corona virus have been mentioned", number, "times.")
导入请求
从bs4导入BeautifulSoup
url='1〕https://www.nytimes.com'
r=请求。获取(url)
soup=BeautifulSoup(r.text,“html.parser”)
a=soup.findAll(“h2”,class=“esl82me0”)
对于a中的故事标题:
打印(故事标题内容[0])
lijst=[“特朗普”、“特朗普”、“冠状病毒”、“新冠病毒”、“病毒”、“新冠病毒”、“新冠病毒-19”]
数字=0
运行=0
运行时
因此,我基本上希望变量“number”增加1,如果标题(列表a中的一个条目)中有特朗普或冠状病毒,或者两者都有


有人知道怎么做吗

一般来说,我建议在命名变量时多加考虑。我喜欢你打印故事标题的方式。行
如果有的话(s中的lijst表示a中的s)
没有做您认为应该做的事情:您需要在单个h2中迭代每个单词。
any
功能只是以下功能的简写:

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False
换句话说,您试图查看整个列表是否在h2元素中,这永远不会是真的。下面是一个修复示例

import requests
from bs4 import BeautifulSoup

url = 'https://www.nytimes.com'
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")
h2s = soup.findAll("h2", class_="esl82me0")

for story_heading in h2s:
    print(story_heading.contents[0])

keywords = ["trump", "Trump", "Corona", "COVID", "virus", "Virus", "Coronavirus", "COVID-19"]
number = 0
run = 0

for h2 in h2s:
    headline = h2.text
    words_in_headline = headline.split(" ")
    for word in words_in_headline:
        if word in keywords:
            number += 1
print("\nTrump or the Corona virus have been mentioned", number, "times.")
输出

Trump or the Corona virus have been mentioned 7 times.

这不算答案,因为我没有给你一个完整的解决方案,但通常你会做以下事情:1。把里面的东西拿来。2.将所有文本强制转换为小写,以便有效地进行匹配。3.将文本标记为单个实体。好的选择是SpaCy和NLTK。4.计数和分类的问题<代码>集合。计数器
可以帮你解决问题。看到代码背后的逻辑是如此令人满意,现在我终于明白我做错了什么。非常感谢!:-)