我有两个csv文件,dictionary.csv和news.csv,其中我匹配了news.csv中dictionary.csv中包含的单词。但是,很明显,即使我不应该,我也一直在找火柴。我不确定这是否是因为我的代码与每个字母或术语都匹配,有人能帮忙吗
以下是我的代码:
news=pd.read_csv("news.csv")
capitalizednews=news['STORY'].str.title() #to capitalize each first letter in news csv
dictionary=pd.read_csv("dictionary.csv")
capitalizeddict=dictionary['Lists'].str.title().str.replace(',','').str.replace('(','').str.replace(')','').str.replace('-','').str.replace('\d','')#to capitalize each first letter in dictionary and remove
splitterm = capitalizeddict.str.split('\s+',expand=True).stack().unique().tolist()
pattern='|'.join(splitterm) #to join all of the terms in dictionary.csv
news["contain term"] =np.where(capitalizednews.str.contains(pattern,regex=True,case=False),1,0)
我的“包含术语”栏一直都是1
虽然,我一直有这样的感觉,因为我的一些术语在拆分后变成了1/2个字母的单词(比如p,Aa),所以我想忽略这些术语
只删除一个字母和两个字母的单词仍然会导致问题。“猫”仍将在“灾难”中被识别。这是一个三个字母的单词。这可能会失败的例子多得多
这就是为什么你需要检查整个单词,而不仅仅是子字符串
由于您将regex与“or”(
|
)一起使用,因此还可以使用regex单词边框r'\b'
:这个东西将使用整
r'\b|\b'
作为分隔符,并将r'\b
添加到第一个单词的开头和最后一个单词的结尾这里使用原始字符串(
r'...'
),因为它是正则表达式,我们使用的是正则表达式特殊字符\b
,而不是转义序列忽略代码读取过程中可能出现的任何问题,这是一个通用函数,用于执行假设单词是标题中具有任意iterable的任意字符串(请注意,它返回一个列表)而列出的操作:
这不会删除表中特定列包含两个或更少字母的单词的条目。它也不处理由多个单词组成的字符串,比如“Hello world”
此外,您的代码似乎混淆了任何给定事物所表示的内容。因为我不知道你的
.csv
的列是什么,我不能再帮你了相关问题 更多 >
编程相关推荐