我正在尝试添加带有标记句子的文件(布朗语料库可以阅读)。
我做的是我去了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
与所有其他语料库文件一起使用。
有什么想法吗?
答案 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