【问题标题】:Can't locate a file using a regular expression in NLTK无法在 NLTK 中使用正则表达式定位文件
【发布时间】:2012-03-13 12:49:51
【问题描述】:

我对编程和 NLTK 还很陌生,并且一直在按照教科书入门。我无法让正则表达式 r'.*.pos' 在 Python 2.7 (Mac) 中工作。我正在关注书中的一组示例,Python Text Processing with NLTK 2.0 Cookbook,第 3 章。我认为代码旨在查找所有名为 pos 的文件(或扩展名为“pos”,我不完全确定。

下面是代码:

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

Traceback(最近一次调用最后一次):

  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!

【问题讨论】:

  • 第一行代码实际上应该是两行 - “reader.words()” 意味着在下一行
  • 您是否尝试在路径末尾添加 / ? (即/Users/mattmatters22/Desktop/pos/

标签: python regex nltk


【解决方案1】:
r'.*\.pos'

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

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

试试不带点r'.*pos',看看你是否得到同样的错误或结果。

【讨论】:

  • 嗨,谢谢,我刚刚尝试过,似乎得到了相同的结果。我的桌面上有一个名为“pos”的文件夹,其中包含一个名为“brown.pos”的文件。我的印象是代码旨在以某种方式访问​​其中一个,但找不到它们..
  • 您的路径看起来确实有问题。可能是大写错误?检查os.listdir('/Users/mattmatters22/Desktop/pos') 是否显示您的文件。
【解决方案2】:

试试reader = TaggedCorpusReader('/Users/mattmatters22/Desktop/pos',['brown.pos']) 如果这不起作用,那么brown.pos 一定不能在/Users/mattmatters22/Desktop/pos

【讨论】:

    【解决方案3】:

    nltk book 中的代码假定语料库名为 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', ...]
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-03
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 2013-01-09
      • 2018-01-31
      • 2017-02-04
      相关资源
      最近更新 更多