一、场景分析
我们平常爬地图 POI 数据的时候,会得到大量的中文地址信息,比如【厦门大学附属中山医院】这个时候,就需要做中文分词,以便进一步分析。
二、中文分词库试用
1、jieba(结巴分词)
pip install jieba
test1.py 代码如下:
import jieba
text = "厦门大学附属中山医院"
words = jieba.cut(text)
print( list(words) )
运行
py test1.py
2、SnowNLP
pip install snownlp
test2.py 代码如下:
from snownlp import SnowNLP
text = "厦门大学附属中山医院"
s = SnowNLP(text)
words = s.words
print(words)
运行
py test2.py
3、thulac(清华大学自然语言处理与社会人文计算实验室开发的中文词法分析工具包)
pip install thulac
test3.py 代码如下:
import thulac
thu = thulac.thulac()
text = "厦门大学附属中山医院"
result = thu.cut(text)
print(result)
运行
py test3.py
三、总结
通过试用,发现三款分词库都能准确的把词条进行分词。
thulac 分词结果,因为加入了 词性标注,结果比较复杂。
jieba 的结果最简单,也最接近自然语言。
四、实战案例
从一个 txt 读入一批中文词条,进行分词,然后把分词结果写入 excel 文件中。
test.py 代码如下:
import jieba
from openpyxl import Workbook
# 创建一个新的工作簿
wb = Workbook()
# 选择默认的活动工作表
ws = wb.active
# 向工作表中写入表头
ws['A1'] = '分词'
# 读取文件
input_path = r"C:\Users\Administrator\Desktop\py\split words\demo\address.txt"
with open(input_path, 'r', encoding='utf-8') as input_file:
for line in input_file:
word = line.strip()
print("---------"+word)
words = jieba.cut( word )
ll = list(words)
for item in ll:
print(item.strip())
temp_list = []
temp_list.append( item.strip() )
ws.append(temp_list)
input_file.close()
# 保存工作簿
wb.save('output.xlsx')
address.txt 如下:
厦门大学思明校区
厦门大学附属中山医院
厦门南洋职业学院
集美大学
运行
py test.py
output.xlsx 如下: