前提:把自己的语料库(sogou文本分类语料库)放在LTK_DATA/corpora/目录下;
然后在命令行输入以下之后,即可看到所有的txt文件名列表了。
- 第一种方法:BracketParseCorpusReader更适合已解析过的语料库
from nltk.corpus import BracketParseCorpusReader
corpus_root =r"F:\nltk_data\corpora\SogouC.reduced.20061127\SogouC.reduced\Reduced" # r"" 防止转义
file_pattern = r".*/.*\.txt" #匹配corpus_root目录下的所有子目录下的txt文件
ptb = BracketParseCorpusReader(corpus_root, file_pattern) #初始化读取器:语料库目录和要加载文件的格式,默认utf8格式的编码
ptb.fileids() #至此,可以看到目录下的所有文件名,例如C000008/1001.txt,则成功了
ptb.raw(“C000008/1001.txt”) # 如果C000008/1001.txt编码格式和ptb格式一致,则看到内容
得到文件的内容后,就可以分词处理了
import jieba
w = jieba.cut(ptb.raw(“C000008/1001.txt”)) #jieba分词工具对文本分词
wlst = list(w) #得到分词列表
w1 = “ ”.join(w) #得到空格划分的分词后文本字符串
- 另一种方法:PlaintextCorpusReader更适合文本文件
from nltk.corpus import PlaintextCorpusReader
corpus_root = r"F:\nltk_data\corpora\SogouC.reduced.20061127\SogouC.reduced\Reduced"
file_pattern = r"1001\.txt"
wordlists = PlaintextCorpusReader(corpus_root, file_pattern)
wordlists.fileids()
wordlists.words("1001.txt")
问题1:下面的命令没办法成功执行?
len(ptb.sents()) # 由于没有sents预处理过,所有没有这个方法,不知道怎么设置??
ptb.sents(fileid='C000024/999.txt')[19] #同上
问题2:在BracketParseCorpusReadr加载中文txt文件时,如何解决gb2312编码问题?(不考虑手动更改文件编码格式前提下)
补充:
Python 解决中文编码问题基本可以用以下逻辑:
utf-8(输入) ——> unicode(处理) ——> (输出)utf-8