自然语言处理:词性标注

步骤一:导入 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函数,但会影响原序列顺序。

猜你喜欢

转载自blog.csdn.net/m0_52051577/article/details/124420558