无法使用NLTK中的正则表达式查找文件

时间:2012-03-13 12:49:51

标签: python regex nltk

我是编程和NLTK的新手,并且已经开始关注教科书。我无法使用正则表达式r'。*。pos'在Python 2.7(Mac)中工作。我正在阅读本书中的一组示例,即使用NLTK 2.0 Cookbook的Python文本处理,第3章。我认为代码的目的是找到所有名为pos的文件(或扩展名为“pos”的文件,我并不完全确定。< / p>

以下是代码:

reader = TaggedCorpusReader('/Users/mattmatters22/Desktop/pos',r'.*\.pos')
reader.words()

追踪(最近一次呼叫最后一次):

  File "<pyshell#20>", line 1, in <module>
    reader.words()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/nltk/corpus/reader/tagged.py", line 82, in words
    for (fileid, enc) in self.abspaths(fileids, True)])
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/nltk/corpus/reader/util.py", line 421, in concat
    raise ValueError('concat() expects at least one object!')
ValueError: concat() expects at least one object!

3 个答案:

答案 0 :(得分:0)

r'.*\.pos'

表示将“.pos”与之前的某些内容匹配(.*部分)。

但是在“/ Users / mattmatters22 / Desktop / pos”中找不到这个。这会导致你的问题吗?

尝试不使用点r'.*pos',看看是否收到相同的错误或结果。

答案 1 :(得分:0)

试试reader = TaggedCorpusReader('/Users/mattmatters22/Desktop/pos',['brown.pos']) 如果这不起作用,则brown.pos不得在/Users/mattmatters22/Desktop/pos

答案 2 :(得分:0)

nltk书中的代码假定语料库名为brown.pos,情况并非如此并且做帮助(TaggedCorpusReader)并查看其init函数向我解释我需要提供两个参数 - 路径和文件名或者可以用来计算文件名的正则表达式。

我在我的linux系统上尝试了以下操作,但它确实有效。希望代码不言自明:

    >>> import nltk
    >>> nltk.corpus.brown.fileids()
    [u'ca01', u'ca02', u'ca03' ..]
    >>> nltk.corpus.brown.abspath('ca01')
    FileSystemPathPointer(u'/home/<username>/nltk_data/corpora/brown/ca01')
    >>> reader = TaggedCorpusReader('/home/<username>/nltk_data/corpora/brown/', 'ca01')
    >>> reader.words()
    [u'The', u'Fulton', u'County', u'Grand', u'Jury', ...]

在此之后,您可以替换自己的正则表达式,而不是使用显式文件名。