NLTK Brown语料库 - 添加自己的标记句子

时间:2014-11-13 14:05:09

标签: python-2.7 nltk

我正在尝试添加带有标记句子的文件(布朗语料库可以阅读)。 我做的是我去了nltk_data/corpora/brown,添加了文件tagged5并转到cats.txt并添加了一行tagged5 homework

但是当我这样做时:

brown_homework = brown.tagged_sents(categories='homework')

它只是给了我ValueError: "In category mapping file cats.txt: tagged5 not found"

虽然文件tagged5与所有其他语料库文件一起使用。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

让我们尝试将文件注入nltk_data/corpora/brown目录:

alvas@ubi:~/nltk_data/corpora/brown$ echo "This/DT is/VB a/DT foobar/JJ sentence/NN ./." > testfile
alvas@ubi:~/nltk_data/corpora/brown$ echo "testfile homework">>cats.txt
alvas@ubi:~/nltk_data/corpora/brown$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from nltk.corpus import brown
>>> "testfile" in brown.fileids()
False

似乎直接将文件注入目录不起作用。但阅读文件有效:

>>> brown.raw('testfile')
u'This/DT is/VB a/DT foobar/JJ sentence/NN ./.\n'
>>> brown.tagged_sents('testfile')
[[(u'This', u'DT'), (u'is', u'VB'), (u'a', u'DT'), (u'foobar', u'JJ'), (u'sentence', u'NN'), (u'.', u'.')]]

但是,您仍然无法通过brown.categories()fileids()访问它:

>>> brown.categories()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/nltk/corpus/reader/api.py", line 326, in categories
    self._init()
  File "/usr/local/lib/python2.7/dist-packages/nltk/corpus/reader/api.py", line 312, in _init
    'not found' % (self._file, file_id))
ValueError: In category mapping file cats.txt: testfile not found

首先让我们找一下如何在NLTK中加载布朗语料库,参见https://github.com/nltk/nltk/blob/develop/nltk/corpus/init.py#L74

brown = LazyCorpusLoader(
    'brown', CategorizedTaggedCorpusReader, r'c[a-z]\d\d',
    cat_file='cats.txt', tagset='brown', encoding="ascii")

现在让我们来看看LazyCorpusLoader(),参见http://www.nltk.org/_modules/nltk/corpus/util.html#LazyCorpusLoader

初始化LazyCorpusLoader时请注意r'c[a-z]\d\d'参数。它看起来棕色语料库有一个特定的命名惯例。

必须以c开头,然后从[a-z]开始,然后是2位数。因此,我们使用文件名cz07而不是testfile。 (原来的布朗语​​料库中没有cz07,所以没关系。)

现在让我们删除testfile以及我们在cats.txt中添加的最后一行:

alvas@ubi:~/nltk_data/corpora/brown$ rm testfile
alvas@ubi:~/nltk_data/corpora/brown$ sed -i '$d' cats.txt 
alvas@ubi:~/nltk_data/corpora/brown$ ls cz07
ls: cannot access cz07: No such file or directory
alvas@ubi:~/nltk_data/corpora/brown$ echo "This/DT is/VB a/DT foobar/JJ sentence/NN ./." > cz07
alvas@ubi:~/nltk_data/corpora/brown$ echo "cz07 homework" >>cats.txt
alvas@ubi:~/nltk_data/corpora/brown$ python

>>> from nltk.corpus import brown
>>> 'cz07' in brown.fileids()
True
>>> 'homework' in brown.categories()
True
>>> brown.tagged_sents(categories='homework')
[[(u'This', u'DT'), (u'is', u'VB'), (u'a', u'DT'), (u'foobar', u'JJ'), (u'sentence', u'NN'), (u'.', u'.')]]

瞧!

请记住删除您添加的额外文件:

>> exit()
alvas@ubi:~/nltk_data/corpora/brown$ sed -i '$d' cats.txt
alvas@ubi:~/nltk_data/corpora/brown$ rm cz07