- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我知道 Treebank 语料库已经被标记了,但与 Brown 语料库不同,我不知道如何获得标签字典。例如,
>>> from nltk.corpus import brown
>>> wordcounts = nltk.ConditionalFreqDist(brown.tagged_words())
这不适用于 Treebank 语料库?
最佳答案
快速解决方案:
>>> from nltk.corpus import treebank
>>> from nltk import ConditionalFreqDist as cfd
>>> from itertools import chain
>>> treebank_tagged_words = list(chain(*list(chain(*[[tree.pos() for tree in treebank.parsed_sents(pf)] for pf in treebank.fileids()]))))
>>> wordcounts = cfd(treebank_tagged_words)
>>> treebank_tagged_words[0]
(u'Pierre', u'NNP')
>>> wordcounts[u'Pierre']
FreqDist({u'NNP': 1})
>>> treebank_tagged_words[100]
(u'asbestos', u'NN')
>>> wordcounts[u'asbestos']
FreqDist({u'NN': 11})
有关详细信息,请参阅 https://en.wikipedia.org/wiki/User:Alvations/NLTK_cheatsheet/CorporaReaders#Penn_Tree_Bank
另请参阅:Is there a way of avoiding so many list(chain(*list_of_list))?
请注意,来自 NLTK 的 Penn Treebank 样本只有 3000 多个句子,棕色语料库有 50,000 个句子。
将句子分成训练集和测试集:
from nltk.corpus import treebank
from nltk import ConditionalFreqDist as cfd
from itertools import chain
treebank_tagged_sents = list(chain(*[[tree.pos() for tree in treebank.parsed_sents(pf)] for pf in treebank.fileids()]))
total_len = len(treebank_tagged_sents)
train_len = int(90 * total_len /100)
train_set = treebank_tagged_sents[:train_len]
print len(train_set)
train_treebank_tagged_words = cfd(chain(*train_set))
test_set = treebank_tagged_sents[train_len:]
print len(test_set)
test_treebank_tagged_words = cfd(chain(*test_set))
如果你打算使用棕色语料库(不包含已解析的句子),你可以使用 tagged_sent()
:
>>> from nltk.corpus import brown
>>> brown_tagged_sents = brown.tagged_sents()
>>> len(brown_tagged_sents)
57340
>>> brown_tagged_sents[0]
[(u'The', u'AT'), (u'Fulton', u'NP-TL'), (u'County', u'NN-TL'), (u'Grand', u'JJ-TL'), (u'Jury', u'NN-TL'), (u'said', u'VBD'), (u'Friday', u'NR'), (u'an', u'AT'), (u'investigation', u'NN'), (u'of', u'IN'), (u"Atlanta's", u'NP$'), (u'recent', u'JJ'), (u'primary', u'NN'), (u'election', u'NN'), (u'produced', u'VBD'), (u'``', u'``'), (u'no', u'AT'), (u'evidence', u'NN'), (u"''", u"''"), (u'that', u'CS'), (u'any', u'DTI'), (u'irregularities', u'NNS'), (u'took', u'VBD'), (u'place', u'NN'), (u'.', u'.')]
>>> total_len = len(brown_tagged_sents)
>>> train_len = int(90 * total_len/100)
>>> train_set = brown_tagged_sents[:train_len]
>>> train_brown_tagged_words = cfd(chain(*train_set))
>>> train_brown_tagged_words['asbestos']
FreqDist({u'NN': 1})
正如@alexis 指出的那样,除非您在句子级别拆分语料库。 tagged_words()
函数也存在于 NLTK 的 Penn Treebank API 中:
>>> from nltk.corpus import treebank
>>> from nltk.corpus import brown
>>> treebank.tagged_words()
[(u'Pierre', u'NNP'), (u'Vinken', u'NNP'), ...]
>>> brown.tagged_words()
[(u'The', u'AT'), (u'Fulton', u'NP-TL'), ...]
>>> type(treebank.tagged_words())
<class 'nltk.corpus.reader.util.ConcatenatedCorpusView'>
>>> type(brown.tagged_words())
<class 'nltk.corpus.reader.util.ConcatenatedCorpusView'>
>>> from nltk import ConditionalFreqDist as cfd
>>> cfd(brown.tagged_words())
<ConditionalFreqDist with 56057 conditions>
>>> cfd(treebank.tagged_words())
<ConditionalFreqDist with 12408 conditions>
关于python - 从 NLTK 的 Penn Treebank 语料库样本创建字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30877796/
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 8年前关闭。 Improve thi
我正在寻找处理 Penn Treebank 结构的 Python 数据结构。这是 Treebank 的样例: ( (S (NP-SBJ (PRP He) ) (VP (VBD shou
说我有一句话: After he had eaten the cheese, Bill went to the grocery. 在我的程序中,我得到以下输出: ---PARSE TREE--- (R
我已经下载了 UPDT波斯语树库( Uppsala Persian Dependency Treebank ),我正在尝试使用斯坦福 NLP 从中构建依赖解析器模型。我尝试使用命令行和 Java 代码
我最初使用的是来自 NLTK 的以下 Penn Treebank 标记器: POS_Tagger = UnigramTagger(treebank.tagged_sents(), backoff=De
我正在专门寻找一些数据结构、枚举或生成过程,通过它们在内部表示不同的词性。我花了很长时间扫描了一段时间的Javadoc和源代码,找不到我要找的东西。如果可能的话,我想直接访问标签的集合,如果它们存储在
我正在寻找一个端口为 this 的 Perl 模块我基本上可以在其中创建一个对象,调用一个 tokenize() 子例程,传入一堆文本并取回一个标记列表。达到那种效果的东西。如果它不存在我会做,但重新
我知道 Treebank 语料库已经被标记了,但与 Brown 语料库不同,我不知道如何获得标签字典。例如, >>> from nltk.corpus import brown >>> wordcou
Penn Treebank tagset有一个单独的标签 TO对于单词“to”,无论它是用于介词意义(例如 I went to school )还是不定式意义(例如 I want to eat )。从
我有来自 OpenNLP 的 POS 标记输入...我需要将这些与 WordNet 一起使用...但 wordnet 仅使用 4 个标签 - 名词、动词、形容词、副词...其中 OpenNLP 根据
我正在使用 OpenIE来自斯坦福 NLP 库的工具,用于从句子中获取最少的从句。以下是我到目前为止的想法(主要是从他们的演示代码中获得灵感): public static void main(Str
我正在努力学习使用 NLTK在 python 中打包。特别是,我需要在 NLTK 中使用 penn tree bank 数据集。据我所知,如果我调用 nltk.download('treebank')
我对 NLTK 和 Python 还很陌生。我一直在使用示例中给出的玩具语法创建句子解析,但我想知道是否有可能使用从 Penn Treebank 的一部分学习的语法,而不是仅仅编写我自己的或使用玩具语
我是一名优秀的程序员,十分优秀!