Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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 - Fatal编程技术网

Python程序,用于查找文档列表(字符串)中是否存在某个关键字

Python程序,用于查找文档列表(字符串)中是否存在某个关键字,python,Python,问题:一位研究人员收集了数千篇新闻文章。但她想把注意力集中在包括一个特定单词在内的文章上 该功能应符合以下标准: 不要包含关键字字符串仅作为较大单词的一部分显示的文档。例如,如果她正在查找关键字“closed”,则不会包含字符串“enclosed” 她不想让你区分大小写字母。因此,当关键字为“Closed”时,将包含短语“Closed the case.” 不要让句点或逗号影响匹配的内容。关键字为“closed”时将包含“It is closed.”。但是你可以假设没有其他类型的标点符号 我的代

问题:一位研究人员收集了数千篇新闻文章。但她想把注意力集中在包括一个特定单词在内的文章上

该功能应符合以下标准:

不要包含关键字字符串仅作为较大单词的一部分显示的文档。例如,如果她正在查找关键字“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`等等。然后在空白处分开,得到一个单词列表。看看你是否需要更多的信息。现在很清楚了。。。资源非常有用