中文分词就是将一个汉字序列切分成一个一个单独的词。例如:
另外还有停用词的概念,停用词是指在数据处理时,需要过滤掉的某些字或词。
一、jieba库
安装过程见:https://blog.csdn.net/momomuabc/article/details/128198306
jieba库的基础与实例:https://blog.csdn.net/momomuabc/article/details/128219592
jieba库基础功能
1.分词函数jieba.cut
import jieba
for i in jieba.cut("我爱python"):
print(i,end=' ')#利用end参数取消换行
--输出
我 爱 python
2.向词库添加词jieba.add_word()
如果想添加一些专业词汇进入词库,可以使用jieba.add_word()
函数
例如:
import jieba
seg_list=jieba.cut("真武七截阵和天罡北斗阵哪个更厉害呢?")
for i in seg_list:
print(i,end=" ")
--此时输出
真武 七截阵 和 天罡 北斗 阵 哪个 更 厉害 呢 ?
--可以看到真武七截阵和天罡北斗阵两个专业词汇被拆分开了,那么进行词组添加
jieba.add_word("真武七截阵")
jieba.add_word("天罡北斗阵")
seg_list=jieba.cut("真武七截阵和天罡北斗阵哪个更厉害呢?")
for i in seg_list:
print(i,end=" ")
--再次输出后,可以看到真武七截阵和天罡北斗阵已经被识别为单独的词
真武七截阵 和 天罡北斗阵 哪个 更 厉害 呢 ?
3.导入词库jieba.load_userdict()
当需要大量导入专业词汇时,使用jieba.add_word()
一个个添加会过于麻烦,可以使用jieba.load_userdict()
方法将词库一次性导入。
词库中的单词需已每行一个词的方式保存,例如:
jieba.load_userdict("D:\\2.2 中文分词\\2.2\\金庸武功招式.txt")
二、文章分词
1.搭建语料库
上一节已经导入了语料库:https://blog.csdn.net/momomuabc/article/details/129183499
代码如下:
import os
import os.path#读取文件路径
import codecs#转换文件读取格式
import pandas
filePaths = []#设置存储文件路径的变量
fileContents = []#存储文件内容的变量
for root, dirs, files in os.walk(
"D:\SogouC.mini\Sample"):
#os.walk()返回文件的目录,子目录,文件名,详情见上篇
for name in files:
filePath = os.path.join(root, name)#将目录和子目录拼接为目前的文件路径
filePaths.append(filePath)#将文件路径存入路径变量
f = codecs.open(filePath, "r", "utf-8")#以utf-8的格式打开当前路径下的文件
fileContent = f.read()#读取文件内容
f.close()#关闭文件
fileContents.append(fileContent)#将文件内容存入内容变量
#将文件路径和内容存入DataFrame中
corpos=pandas.DataFrame({
"filePath":filePaths,
"fileContent":fileContents
}
)
2.语料库分词
分词后需要注明,每个分词的来源,因此需要取上面的corpos对象里的filepath,并对filecontent进行分词。
import jieba
Path=[]
segments=[]
for index,row in corpos.iterrows():#返回corpos的内容
filepath=row["filePath"]#取其中的filepath字段
segs=jieba.cut(row["fileContent"])#取其中的filecontent字段,并进行分词
for seg in segs:#将分词后的内容遍历
segments.append(seg)#存入segments
Path.append(filepath)#同时存储filepath
segmentDataFrame=pandas.DataFrame(#将分词结果存为数据框
{
"filepath":Path,
"segment":segments
}
)
iterrow()
方法可以返回所有的行索引index,以及该行的所有内容row。