Не удается найти файл с помощью регулярного выражения в NLTK - PullRequest
1 голос
/ 13 марта 2012

Я довольно новичок в программировании и NLTK, и начал изучать учебник.У меня проблемы с получением регулярного выражения r '. *. Pos' для работы в Python 2.7 (Mac).Я следую ряду примеров из книги «Обработка текста на Python с помощью NLTK 2.0 Cookbook», глава 3. Я думаю, что код предназначен для поиска всех файлов с именем pos (или с расширением «pos», я не совсем уверен.

Ниже приведен код:

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 голосов
/ 15 марта 2012

Попробуйте reader = TaggedCorpusReader('/Users/mattmatters22/Desktop/pos',['brown.pos']) Если это не сработает, то brown.pos не должно быть в /Users/mattmatters22/Desktop/pos

0 голосов
/ 02 октября 2014

Код в 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', ...]

После этого вместо использования явного имени файла вы можете заменить свое собственное регулярное выражение.

0 голосов
/ 13 марта 2012
r'.*\.pos'

означает совпадение «.pos» с, возможно, чем-то раньше (часть .*).

Но этого нельзя найти в «/ Users / mattmatters22 / Desktop / pos».Может ли это стать причиной вашей проблемы?

Попробуйте без точки r'.*pos' и посмотрите, получите ли вы ту же ошибку или результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...