gpt4 book ai didi

python - NLTK ConllCorpusReader 中的 NE 标签

转载 作者:太空宇宙 更新时间:2023-11-04 04:56:45 25 4
gpt4 key购买 nike

我正在尝试将 CoNLLCorpusReader 用于 CoNLL2003 数据集。该数据集包含 4 列(示例):

WORD      POS   CHUNK NE
U.N. NNP I-NP I-ORG
official NN I-NP O
Ekeus NNP I-NP I-PER
heads VBZ I-VP O
for IN I-PP O
Baghdad NNP I-NP I-LOC
. . O O

我创建了语料库并且它有效 - 我可以使用 pos 标签和 block 标签获取单词、发送和元组。

问题是,如何从我的语料库中获取命名实体标签?我知道有 corpus.raw() 方法,但是真的没有办法用 corpus.iob_words() 之类的东西得到它吗?我发现了这个问题:https://github.com/nltk/nltk/issues/63 ,但是在这个 corpusReader 的最新版本中,iob_words 方法中没有额外的参数,我可以使用它来更改我想要获取的列列表。

最佳答案

看来得靠自己了。试一试,我认为您只需要扩展ConllCorpusReader 就可以告诉iob_words() 选择 NE 列而不是(默认)CHUNK 列。 iob_sents() chunked_words()chunked_sents() 应该做类似的修改。

class betterConllReader(ConllCorpusReader):

def iob_words(self, fileids=None, tagset=None, column="chunk"):
"""
:return: a list of word/tag/IOB tuples
:rtype: list(tuple)
:param fileids: the list of fileids that make up this corpus
:type fileids: None or str or list
"""
self._require(self.WORDS, self.POS, self.CHUNK)
def get_iob_words(grid):
return self._get_iob_words(grid, tagset, column)
return LazyConcatenation(LazyMap(get_iob_words, self._grids(fileids)))

def _get_iob_words(self, grid, tagset=None, column="chunk"):
pos_tags = self._get_column(grid, self._colmap['pos'])
if tagset and tagset != self._tagset:
pos_tags = [map_tag(self._tagset, tagset, t) for t in pos_tags]
return list(zip(self._get_column(grid, self._colmap['words']), pos_tags,
self._get_column(grid, self._colmap[column])))

我所做的只是用关键字参数替换硬编码的“chunk”。通过更多的工作,可以选择多个列(对于 iob_*() 是合理的,对于 chunked_*() 变体则不太清楚。)

关于python - NLTK ConllCorpusReader 中的 NE 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46872083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com