Python程序,用于查找文档列表(字符串)中是否存在某个关键字
问题:一位研究人员收集了数千篇新闻文章。但她想把注意力集中在包括一个特定单词在内的文章上 该功能应符合以下标准: 不要包含关键字字符串仅作为较大单词的一部分显示的文档。例如,如果她正在查找关键字“closed”,则不会包含字符串“enclosed” 她不想让你区分大小写字母。因此,当关键字为“Closed”时,将包含短语“Closed the case.” 不要让句点或逗号影响匹配的内容。关键字为“closed”时将包含“It is closed.”。但是你可以假设没有其他类型的标点符号 我的代码:-Python程序,用于查找文档列表(字符串)中是否存在某个关键字,python,Python,问题:一位研究人员收集了数千篇新闻文章。但她想把注意力集中在包括一个特定单词在内的文章上 该功能应符合以下标准: 不要包含关键字字符串仅作为较大单词的一部分显示的文档。例如,如果她正在查找关键字“closed”,则不会包含字符串“enclosed” 她不想让你区分大小写字母。因此,当关键字为“Closed”时,将包含短语“Closed the case.” 不要让句点或逗号影响匹配的内容。关键字为“closed”时将包含“It is closed.”。但是你可以假设没有其他类型的标点符号 我的代
keywords=[“赌场”]
def多词搜索(文档、关键字):
dic={}
z=[]
对于文档中的word:
i=文档索引(word)
token=word.split()
new=[j.rstrip(“,”).lower()表示令牌中的j]
对于关键字中的k:
如果k.lower()为新值:
dic[k]=z.append(i)
其他:
dic[k]=[]
返回dic
当给出文档=['TheLearnPython Challenge casino','TheLearnPython Challenge casino','他们买了一辆车','Casinoville?',关键字=['casino']
时,它必须返回{'casino':[0]}
的值,但得到的却是{'casino casino:[]}
。
我想知道是否有人可以帮助我?我会首先使用split()标记字符串“new”,然后构建一个集合以加快查找速度
如果希望不区分大小写,则需要在两侧降低大小写
for k in keywords:
s = set(new.split())
if k in s:
dic[k] = z.append(i)
else:
dic[k]=[]
return dic
这并不像看上去那么琐碎。从NLP(自然语言处理)中,将文本拆分为单词并非易事(这称为标记化)
导入nltk
#stemmer=nltk.stem.PorterStemmer()
def多词搜索(文档、关键字):
#初始化结果字典
dic={kw:[]表示关键字中的kw}
对于i,枚举中的文档(文档):
#预处理文档
doc=doc.lower()
tokens=nltk.word\u标记化(doc)
tokens=[stemmer.stem(token)表示令牌中的令牌]
#搜索每个关键字
对于关键字中的kw:
#kw=阀杆器阀杆(kw.lower())
千瓦=千瓦下()
如果以令牌表示:
#如果找到,则添加到结果字典
dic[kw].附加(i)
返回dic
documents=[“学习Python挑战赌场”,“他们买了一辆车”,“赌场?”一些赌场]
关键词=['casino']
多词搜索(文档、关键字)
要增加匹配,可以使用词干(它可以删除复数和动词的词干变化,例如:running->run)这也应该有效
document=['The Learn Python Challenge Casino', 'They bought a car', 'Casinoville?']
keywords=['casino', 'car']
def findme(term):
for x in document:
val = x.split(' ')
for v in val:
if term.lower() == v.lower():
return document.index(x)
for key in keywords:
n = findme(key)
print(f'{key}:{n}')
请编辑您的问题,以便正确显示示例。是否必须使用python?使用grep-i'\bclose\b'path_to_file/*.txt
应该可以很好地工作<代码>'\b'
表示regexp中的单词边界。必须使用python完成此操作。否则
分支将无所作为,您应该完全删除它…谢谢!这是一个打字错误。我不知道nltk库的使用,你能提供一个简单的方法来解决这个问题吗?是一个简化自然语言处理的库。在这里,它用于拆分文字形式的文档(更简单的方法是在空白document.split(“”)
)上进行分段)nltk.word_tokenize
处理诸如“It is the casino!”之类的句子,这些句子分为['It'、'is'、's'、's'、's'、'!']
段,而不是['It'、'is'、's'、's'、's!']
。你能简单地告诉我一下,tokenize是如何工作的,因为我有点困惑吗,许多正则表达式应用于文本以解决不同的分段问题,其中一个将取代代码>按`<然后是
's`by`s`等等。然后在空白处分开,得到一个单词列表。看看你是否需要更多的信息。现在很清楚了。。。资源非常有用