步骤一:导入 jieba 库,对文本内容进行分词处理。
导入
jieba
库的
posseg
模块,对文本进行分词标注。
步骤二:
词性统计:
导入
pandas
库,提取出标注返回结果的每项元素的
flag
部分,即词性部分,随后
用
pandas
中的
value_counts
进行词性统计,并用
head()
函数返回出现最多的前十行。
词性种类统计:
将原标记数据进行去重处理,再遍历去重后的数据,此时若同样的词出现
n
次,即
为词一样但对应词性不一样,也就是说一个词包含了
n
种词性。按这样的思路,对词性
种类进行值的统计。输出种类最多的前十项。
代码:
import nltk import re
import jieba data_path='D://自然语言处理/西游记第一章.txt'
text=''
with open(data_path,'r') as f:
text=f.read()
print(len(set(text)))
text
rst1=re.findall(r'<p>\n\t\u3000\u3000(.*)</p>\n',text)
print(rst1)
rst1=','.join(rst1)
text2=jieba.lcut(rst1)
print('分词结果',text2)
#标注
import jieba.posseg as pseg
psgRes=pseg.lcut(rst1)
print('标注结果:',psgRes)
#统计词性标注结果中每种词性出现的次数,并输出出现次数最多的前十项
import pandas as pd
flags=[]
for i in psgRes:
flags.append(i.flag)
result=pd.value_counts(flags)
print('词性统计结果\n',result)
print('词性出现最多的前十行\n',result.head(10))
#统计词性标注结果中每个词有多少种词性,并输出被标注词性种类最多的前十项
#去重
psgRes1=[]
for l1 in psgRes:
if l1 not in psgRes1:
psgRes1.append(l1)
print(psgRes1)
words=[]
for i in psgRes1:
words.append(i.word)
result1=pd.value_counts(words)
print('词性种类统计结果\n',result1)
print('被标注词性种类最多的前十项\n',result1.head(10))
去重方法可用set函数,但会影响原序列顺序。