NLTK自定义分类语料库不读取文件
NLTK custom categorized corpus not reading files
我创建了自己的语料库,类似于nltk中的movie_reviews语料库(按neg|pos分类。)
neg 和 pos 文件夹中是 txt 文件。
代码:
from nltk.corpus import CategorizedPlaintextCorpusReader
mr = CategorizedPlaintextCorpusReader('C:\mycorpus', r'(?!\.).*\.txt',
cat_pattern=r'(neg|pos)/.*')
当我尝试阅读其中一个文件或与之交互时,我无法做到。
例如len(mr.categories())
运行,但不 return 任何东西:
>>>
我在这里阅读了多个关于自定义分类语料库的文档和问题,但我仍然无法使用它们。
完整代码:
import nltk
from nltk.corpus import CategorizedPlaintextCorpusReader
mr = CategorizedPlaintextCorpusReader('C:\mycorpus', r'(?!\.).*\.txt',
cat_pattern=r'(neg|pos)/.*')
len(mr.categories())
我最终希望能够针对我的数据执行朴素贝叶斯算法,但我无法读取内容。
路径:
C:\mycorpus\pos
C:\mycorpus\neg
在 pos 文件中是一个 'cv.txt' 并且 neg 包含一个 'example.txt'
我觉得你的
有点奇怪
cat_pattern=r'(neg|pos)/.*'
因为您使用的是基于 MsDOS 的系统(我猜是 Windows)并且文件夹包含用 \ 表示,而不是 / (或者我不明白它)
我正在使用 Linux,对您的代码进行以下修改(使用玩具语料库文件)对我来说工作正常:
import nltk
from nltk.corpus import CategorizedPlaintextCorpusReader
import os
mr = CategorizedPlaintextCorpusReader(
'/home/ely/programming/nltk-test/mycorpus',
r'(?!\.).*\.txt',
cat_pattern=os.path.join(r'(neg|pos)', '.*')
)
print(len(mr.categories()))
这表明当您在 Windows 系统上时,使用 /
作为文件系统分隔符的 cat_pattern
字符串存在问题。
在我的示例中使用 os.path.join
,或者如果使用 Python 3,则使用 pathlib
将是解决它的好方法,因此它与 OS 无关并且您不会因正则表达式转义斜杠与文件系统定界符混合而出错。
事实上,对于参数字符串中文件系统定界符的所有情况,您都可以使用这种方法,这通常是一个好习惯,可以使代码可移植并避免奇怪的字符串修改技术债务。
我创建了自己的语料库,类似于nltk中的movie_reviews语料库(按neg|pos分类。)
neg 和 pos 文件夹中是 txt 文件。
代码:
from nltk.corpus import CategorizedPlaintextCorpusReader
mr = CategorizedPlaintextCorpusReader('C:\mycorpus', r'(?!\.).*\.txt',
cat_pattern=r'(neg|pos)/.*')
当我尝试阅读其中一个文件或与之交互时,我无法做到。
例如len(mr.categories())
运行,但不 return 任何东西:
>>>
我在这里阅读了多个关于自定义分类语料库的文档和问题,但我仍然无法使用它们。
完整代码:
import nltk
from nltk.corpus import CategorizedPlaintextCorpusReader
mr = CategorizedPlaintextCorpusReader('C:\mycorpus', r'(?!\.).*\.txt',
cat_pattern=r'(neg|pos)/.*')
len(mr.categories())
我最终希望能够针对我的数据执行朴素贝叶斯算法,但我无法读取内容。
路径:
C:\mycorpus\pos
C:\mycorpus\neg
在 pos 文件中是一个 'cv.txt' 并且 neg 包含一个 'example.txt'
我觉得你的
有点奇怪cat_pattern=r'(neg|pos)/.*'
因为您使用的是基于 MsDOS 的系统(我猜是 Windows)并且文件夹包含用 \ 表示,而不是 / (或者我不明白它)
我正在使用 Linux,对您的代码进行以下修改(使用玩具语料库文件)对我来说工作正常:
import nltk
from nltk.corpus import CategorizedPlaintextCorpusReader
import os
mr = CategorizedPlaintextCorpusReader(
'/home/ely/programming/nltk-test/mycorpus',
r'(?!\.).*\.txt',
cat_pattern=os.path.join(r'(neg|pos)', '.*')
)
print(len(mr.categories()))
这表明当您在 Windows 系统上时,使用 /
作为文件系统分隔符的 cat_pattern
字符串存在问题。
在我的示例中使用 os.path.join
,或者如果使用 Python 3,则使用 pathlib
将是解决它的好方法,因此它与 OS 无关并且您不会因正则表达式转义斜杠与文件系统定界符混合而出错。
事实上,对于参数字符串中文件系统定界符的所有情况,您都可以使用这种方法,这通常是一个好习惯,可以使代码可移植并避免奇怪的字符串修改技术债务。