我正在使用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")
答案 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")
这实际上就是它的全部,除非您想添加一些奢侈品,例如将文本分成几行。