Python NLTK查找语料库中上下文单词5个单词(左/右)内的单词出现情况

Python NLTK查找语料库中上下文单词5个单词(左/右)内的单词出现情况,python,nltk,text-mining,Python,Nltk,Text Mining,我使用scrapy对一个网站进行爬网,获得数千个.txt文件,每个文件都包含一个自然语言文本(描述药物诱发的体验)。每个文件的名称都是唯一的编号。 我还有一个.csv文件,其中包含与每个唯一编号相关联的元数据(即,我有一列用于文本编号,其他列用于对应于此特定编号的元数据)。元数据的一个类别是剂量数(mg) 以下是我想做的: 查找哪些.txt文件包含在100个特定上下文单词(我有一个精确的列表)的5个单词(左和右)内出现的特定单词(“self”) 获取在第一步中挑选出来的.txt文件的平均剂量数(

我使用scrapy对一个网站进行爬网,获得数千个.txt文件,每个文件都包含一个自然语言文本(描述药物诱发的体验)。每个文件的名称都是唯一的编号。 我还有一个.csv文件,其中包含与每个唯一编号相关联的元数据(即,我有一列用于文本编号,其他列用于对应于此特定编号的元数据)。元数据的一个类别是剂量数(mg)

以下是我想做的:

  • 查找哪些.txt文件包含在100个特定上下文单词(我有一个精确的列表)的5个单词(左和右)内出现的特定单词(“self”)

  • 获取在第一步中挑选出来的.txt文件的平均剂量数(来自元数据),以便将其与所有.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='')的操作
    或任何与目录结构匹配的操作来获取文件名列表。