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

时间:2019-05-04 16:19:31

标签: python keras nlp nltk pos-tagger

我正在使用Phyton和Keras制作POS Tagger。我获得的数据正在使用STTS标签,但是我应该为通用标签集创建一个Tagger。所以我需要翻译一下。

首先我想到了制作字典,然后简单地搜索替换标签,但是后来我看到了使用TaggedCorpusReader设置标签集的选项。 (例如“棕色”)

但是我错过了可以在此处使用的可能标签集的列表。我可以以某种方式使用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")

1 个答案:

答案 0 :(得分:1)

只需按照您的考虑创建字典并替换标签即可。 nltk的通用标签集支持由模块nltk/tag/mapping.py提供。它依赖于一组映射文件,您可以在NLTK_DATA/taggers/universal_tagset中找到它们。例如,在en-brown.map中,您会找到类似这样的行,它们将一堆标记映射到PRT,将ABX映射到DET,依此类推:

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

这些文件被读入用于翻译的字典中。通过以相同的格式创建映射文件,您可以使用nltk的功能来执行翻译,但是老实说,如果您的任务只是产生通用格式的语料库,那么我只会手工进行翻译。但不能通过“搜索替换”:使用nltk语料库阅读器提供的元组,只需在映射字典中直接查找即可替换POS标签。

让我们假设您知道如何说服nltk TaggedCorpusReader来阅读您的语料,现在您有了一个stts_corpus阅读器对象,该对象带有方法tagged_words()tagged_sents()等。您还需要映射字典,其字典的键是STTS标签,值是通用标签。如果ABL是STTS标记,则mapping_dict["ABL"]应该返回值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")

这实际上就是它的全部,除非您想添加一些奢侈品,例如将文本分成几行。