Python: TaggedCorpusReader 如何从 STTS 到通用标签集

Python: TaggedCorpusReader how to get from a STTS to a Universal tagset

我正在使用 Python 和 Keras 开发词性标注器。我得到的数据是使用 STTS 标签,但我应该为通用标签集创建一个标签器。所以我需要翻译这个。

首先我想到制作一个字典并简单地搜索替换标签,但后来我看到了使用 TaggedCorpusReader 设置标签集的选项。 (例如 'brown')

但我错过了可以在那里使用的可能标签集的列表。我可以以某种方式使用 STTS 标签集还是必须自己制作字典?

示例来源: 代码#3:将语料库标签映射到通用标签集 https://www.geeksforgeeks.org/nlp-customization-using-tagged-corpus-reader/

corpus = TaggedCorpusReader(filePath, "standard_pos_tagged.txt", tagset='STTS') #?? doesn't work sadly
# ....
trainingCorpus.tagged_sents(tagset='universal')[1]

最后看起来像这样:(非常感谢alexis

with open(resultFileName, "w") as output:
    for sent in stts_corpus.tagged_sents():
        for word, tag in sent:
            try:
                newTag = mapping_dict[tag];
                output.write(word+"/"+newTag+" ")               
            except:
                print("except "  + str(word) + " - " + str(tag))
        output.write("\n")

只需创建一个字典并替换标签,就像您考虑的那样。 nltk 的通用标签集支持由模块 nltk/tag/mapping.py 提供。它依赖于一组映射文件,您可以在 NLTK_DATA/taggers/universal_tagset 中找到这些文件。例如,在 en-brown.map 中,您会发现这样的行,它将一大堆标签映射到 PRTABXDET,等等:

ABL     PRT
ABN     PRT
ABN-HL  PRT
ABN-NC  PRT
ABN-TL  PRT
ABX     DET
AP      ADJ

这些文件被读入用于翻译的词典中。通过创建相同格式的映射文件,您可以使用 nltk 的函数来执行翻译,但老实说,如果您的任务只是生成通用格式的语料库,我会手工进行翻译。但不是通过 "search-replace":使用 nltk 的语料库 readers 提供的元组,并通过在映射字典中直接查找来替换 POS 标签。

假设您知道如何说服 nltk TaggedCorpusReader 阅读您的语料库,并且您现在有一个 stts_corpus reader 对象,其方法为 tagged_words()tagged_sents(),等。还需要映射字典,其键为STTS标签,值为通用标签;如果 ABL 是一个 STTS 标签,mapping_dict["ABL"] 应该 return 值 PRT。然后你的重新映射是这样的:

for filename in stts_corpus.fileids():
    with open("new_dir/"+filename, "w") as output:
        for word, tag in stts_corpus.tagged_words():
            output.write(word+"/"+mapping_dict[tag]+" ")
        output.write("\n")

这就是全部内容,除非您想添加一些奢侈品,例如将文本分成几行。