Skip to main content
 首页 » 编程设计

python之从自定义转储创建供 webnet 使用的信息内容语料库

2024年10月24日43fff_TT

我正在使用 Brown 语料库 ic-brown.dat 计算一个词的信息内容,使用 wordnet nltk 库。但结果并不好看。我想知道如何构建自己的 custome.dat(信息内容文件)。

custom_ic = wordnet_ic.ic('custom.dat') 

请您参考如下方法:

在 (...)/nltk_data/corpora/wordnet_ic/ 你会发现 IC-compute.sh 包含一些调用一些 Perl 脚本来生成 IC来自给定语料库的 dat 文件。我发现指令很棘手,而且我没有 require Perl 脚本,所以我决定通过分析 dat 文件结构和 wordnet.ic() 函数来创建一个 python 脚本。

您可以通过对语料库阅读器对象调用 wordnet.ic() 函数来计算自己的 IC 计数。事实上,你只需要一个带有 word() 函数的对象,该函数返回语料库中的所有单词。有关详细信息,请查看文件中的 ic 函数(第 1729 行到 1789 行)..../nltk/corpus/reader/wordnet.py。

例如,对于 BNC 语料库 (2007) 的 XML 版本:

reader_bnc = nltk.corpus.reader.BNCCorpusReader(root='../Corpus/2554/2554/download/Texts/', fileids=r'[A-K]/\w*/\w*\.xml') 
bnc_ic = wn.ic(reader_bnc, False, 0.0) 

为了生成 .dat 文件,我创建了以下函数:

def is_root(synset_x): 
    if synset_x.root_hypernyms()[0] == synset_x: 
        return True 
    return False 
 
def generate_ic_file(IC, output_filename): 
    """Dump in output_filename the IC counts. 
    The expected format of IC is a dict  
    {'v':defaultdict, 'n':defaultdict, 'a':defaultdict, 'r':defaultdict}""" 
    with codecs.open(output_filename, 'w', encoding='utf-8') as fid: 
        # Hash code of WordNet 3.0 
        fid.write("wnver::eOS9lXC6GvMWznF1wkZofDdtbBU"+"\n") 
 
        # We only stored nouns and verbs because those are the only POS tags 
        # supported by wordnet.ic() function 
        for tag_type in ['v', 'n']:#IC: 
            for key, value in IC[tag_type].items(): 
                if key != 0: 
                    synset_x = wn.of2ss(of="{:08d}".format(key)+tag_type) 
                    if is_root(synset_x): 
                        fid.write(str(key)+tag_type+" "+str(value)+" ROOT\n") 
                    else: 
                        fid.write(str(key)+tag_type+" "+str(value)+"\n") 
    print("Done") 
 
generate_ic_file(bnc_ic, "../custom.dat") 

然后,调用函数:

custom_ic = wordnet_ic.ic('../custom.dat') 

需要导入的是:

import nltk 
from nltk.corpus import wordnet as wn 
from nltk.corpus import wordnet_ic 
import codecs