Python NLTK查找语料库中上下文单词5个单词(左/右)内的单词出现情况
我使用scrapy对一个网站进行爬网,获得数千个.txt文件,每个文件都包含一个自然语言文本(描述药物诱发的体验)。每个文件的名称都是唯一的编号。 我还有一个.csv文件,其中包含与每个唯一编号相关联的元数据(即,我有一列用于文本编号,其他列用于对应于此特定编号的元数据)。元数据的一个类别是剂量数(mg) 以下是我想做的:Python NLTK查找语料库中上下文单词5个单词(左/右)内的单词出现情况,python,nltk,text-mining,Python,Nltk,Text Mining,我使用scrapy对一个网站进行爬网,获得数千个.txt文件,每个文件都包含一个自然语言文本(描述药物诱发的体验)。每个文件的名称都是唯一的编号。 我还有一个.csv文件,其中包含与每个唯一编号相关联的元数据(即,我有一列用于文本编号,其他列用于对应于此特定编号的元数据)。元数据的一个类别是剂量数(mg) 以下是我想做的: 查找哪些.txt文件包含在100个特定上下文单词(我有一个精确的列表)的5个单词(左和右)内出现的特定单词(“self”) 获取在第一步中挑选出来的.txt文件的平均剂量数(
我真的不知道如何继续…我认为正则表达式可能是一个很好的解决方案。 它们很快,而且你有很多数据。 不确定最好的方法是什么,但这里有一个解决方案 说出你的目标词(“self”),你的上下文词列表如下所示:
target_word = 'self'
context_words = ['one', 'hundred', 'context', 'words']
#mine is much shorter than yours! ;)
然后,您可以创建一个正则表达式,该表达式希望单词之间用空格分隔。
我使用了一种模式来表示上下文单词在前,一种模式用于表示上下文单词在后,然后将它们与or(“|”)组合。
不确定是否有必要,只是想不出另一种方法
import re
matches_up_to_4_words = '( [^ ]*){0,4} ?'
matches_context_word = '(' + '|'.join(context_words) + ')'
matches_target_word = target_word
context_before = matches_context_word + matches_up_to_4_words + matches_target_word
context_after = matches_target_word + matches_up_to_4_words + matches_context_word
pattern = re.compile('(' + context_before + '|' + context_after + ')')
matching_metadata = []
for filename in filenames:
filestring = open(filename, 'rb').read()
## you can tokenize here for better word segmentation
## http://www.nltk.org/api/nltk.tokenize.html
if re.search(pattern, filestring):
print "the target word appeared near a context word"
## get the metadata
metadata = get_the_metadata(filename, filestring)
matching_metadata.append(metadata)
然后您就可以存储元数据,以便使用。非常感谢!如果这是一个新手犯的错误,我很抱歉(我对python和一般的编码都很陌生),但是当我用“文件名中的文件名”尝试您的代码时,我得到了以下错误:NameError:name'filenames'没有定义我还尝试用os.listdir(“txt”)中的文件名的
替换它:
,知道我有一个/txt文件夹,其中包含代码所在的文本,但这会给我带来另一个错误:IOError:[Errno 2]没有这样的文件或目录:“sample.txt”
噢,嗯。。。我不知道你的目录结构是什么样的,所以我只使用了一个变量。您可以执行类似于filenames=paste('data-directory/',1:100,'.txt',sep='')的操作或任何与目录结构匹配的操作来获取文件名列表。