如何忽略字符串列表中只有1/2个字母的单词

2024-10-01 00:27:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个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),所以我想忽略这些术语


Tags: csvto代码inreaddictionarytitle字母
2条回答

只删除一个字母和两个字母的单词仍然会导致问题。“猫”仍将在“灾难”中被识别。这是一个三个字母的单词。这可能会失败的例子多得多

这就是为什么你需要检查整个单词,而不仅仅是子字符串

由于您将regex与“or”(|)一起使用,因此还可以使用regex单词边框r'\b'

pattern = r'\b' + r'\b|\b'.join(splitterm) + r'\b'

这个东西将使用整r'\b|\b'作为分隔符,并将r'\b添加到第一个单词的开头和最后一个单词的结尾

这里使用原始字符串(r'...'),因为它是正则表达式,我们使用的是正则表达式特殊字符\b,而不是转义序列

忽略代码读取过程中可能出现的任何问题,这是一个通用函数,用于执行假设单词是标题中具有任意iterable的任意字符串(请注意,它返回一个列表)而列出的操作:

def weed_out_short_words(wordlist):
    wordlist2 = []
    for word in wordlist:
        if word.length <= 2:
            pass
        else:
            wordlist2.append(word)

这不会删除表中特定列包含两个或更少字母的单词的条目。它也不处理由多个单词组成的字符串,比如“Hello world”

此外,您的代码似乎混淆了任何给定事物所表示的内容。因为我不知道你的.csv的列是什么,我不能再帮你了

相关问题 更多 >