# 中文分词 jieba 库

# 分词原理

  • 利用中文词库,确定中文字符之间的关联概率
  • 中文字符间概率大的组成词组,形成分词结果
  • 除了分词,用户还宽裕添加自定义的词组

# 三种模式

  • 精确模式:把文本精确切分开,不存在冗余单词
  • 全模式:把文本中所有可能的词语都扫描出来,有冗余
  • 搜索引擎模式:在精确模式的基础上,对长词再次切分

# 常用函数

# 精确模式

返回一个列表类型的分词结果

精确模式
1
2
3
import jieba as jb  

print(jb.lcut('潺潺流水终于穿过了群山一座座'))

输出 ['潺潺流水', '终于', '穿过', '了', '群山', '一座座']

# 全模式

返回一个列表类型的分词结果

全模式
1
2
3
import jieba as jb  

print(jb.lcut('潺潺流水终于穿过了群山一座座', cut_all=True))

输出 ['潺潺', '潺潺流水', '流水', '终于', '穿过', '了', '群山', '一座', '一座座']

# 搜索引擎模式

返回一个列表类型的分词结果

搜索引擎模式
1
2
3
import jieba as jb  

print(jb.lcut_for_search("潺潺流水终于穿过了群山一座座"))

输出 ['潺潺', '流水', '潺潺流水', '终于', '穿过', '了', '群山', '一座', '一座座']

# 向分词库中新加词

jieba.add_word  是 jiebajieba 分词库中的一个函数,用于向词典中添加新词。通过添加自定义词语,可以提高分词准确性,特别是在处理专业术语、新词或特定领域词汇时

添加词语
1
2
3
import jieba

jieba.add_word("深度学习")

# 词云绘制 worldcloud 库

# 用法

WordCloudWordCloud 对象为基础,配置参数、加载文本、输出文件

基础词云
1
2
3
4
5
import wordcloud as wd  

c = wd.WordCloud() # 步骤一:配置对象参数
c.generate("wordcloud by Python") # 步骤二:加载词云文本
c.to_file("pywordcloud.png") # 步骤三:输出词云文件

# 配置参数

配置参数
1
2
3
4
5
6
7
8
9
10
11
12
import wordcloud as wd  

cloud = wd.WordCloud(
width=600, height=400, # 长宽
min_font_size=10, max_font_size=20, # 最小字号(默认四号)和最大字号(根据高度自动调节)
font_step=2, # 词云字体字号步进间隔,默认为 1 # font_path="msyh.ttc" 指定字体文件路径,默认为NULL
max_words=20, # 最大单词数量(默认200)
stopwords={"nihao"}, # 排除词列表
# 指定词云形状
# from scipy.misc import imread
# mk = imread("pic.png") # w = wd.WordCloud(mask = mk) background_color="white" # 指定默认颜色,默认为黑色
)

# 示例

示例
1
2
3
4
5
6
7
8
9
import jieba  
import wordcloud
txt = "程序设计语言是计算机能够理解和识别用户\
操作意图的一种交互体系,它按照特定规则组织计算机指令,\
使计算机能够自动进行各种运算处理"

w = wordcloud.WordCloud(width=1000, height=700, font_path="msyh.ttc")
w.generate(" ".join(jieba.lcut(txt)))
w.to_file("pywordcloud4.png")

  • 为什么一定要 " ".join(jieba.lcut(txt)) ?
    • wordcloud  库的  generate()  方法需要接收一个字符串,这个字符串中的词语需要用空格分隔。库会根据空格将字符串拆分成单独的词语,然后统计词频并生成词云。如果直接使用  "".join(jieba.lcut(txt)) ,所有词语会连在一起, wordcloud  无法正确识别每个词语的边界,导致无法生成正确的词云。

# 复杂网络分析库 networkx

NetWorkXNetWorkX 是一个基于 pythonpython 的图论和网络分析库,提供了许多功能

  • 灵活的数据结构NetWorkXNetWorkX 支持多种类型的图,包括无向图、有向图、加权图等,以及节点和边的属性
  • 丰富的算法NetWorkXNetWorkX 提供了大量的图论算法,包括图的遍历、最短路径、社区发现、中心性等,满足各种网络分析需求
  • 可视化支持NetWorkXNetWorkX 提供了简单易用的可视化工具,用于绘制和展示复杂网络结构,帮助用户直观地理解和分析数据

# 创建图

创建图
1
2
3
4
5
6
7
8
import networkx as nx  

G = nx.Graph()
G.add_node(1)
G.add_nodes_from([2, 3])

G.add_edge(1, 2)
G.add_edges_from([(1, 3), (2, 3)])

# 绘制图

绘制图
1
2
3
4
5
6
7
8
9
10
11
12
import networkx as nx  
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_node(1)
G.add_nodes_from([2, 3])

G.add_edge(1, 2)
G.add_edges_from([(1, 3), (2, 3)])

nx.draw(G, with_labels=True)
plt.show()

# 计算节点度中心性

# 度中心性

度中心性是在网络分析中刻画节点中心性的最直接度量指标。一个节点的节点度越大就意味着这个节点的度中心性越高,该节点在网络中就越重要

# 代码

度中心性
1
2
3
4
5
6
7
8
9
10
11
import networkx as nx  

G = nx.Graph()
G.add_node(1)
G.add_nodes_from([2, 3])

G.add_edge(1, 2)
G.add_edges_from([(1, 3), (2, 3)])

degree = nx.degree_centrality(G)
print(degree)

上述代码输出 {1: 1.0, 2: 1.0, 3: 1.0}

# 查找最短路径

最短路径
1
2
3
4
5
6
7
8
9
10
11
import networkx as nx  

G = nx.Graph()
G.add_node(1)
G.add_nodes_from([2, 3])

G.add_edge(1, 2)
G.add_edges_from([(1, 3), (2, 3)])

shortest = nx.shortest_path(G, source=1, target=3)
print(shortest)

这个代码查找的是路径,上述代码输出 [1, 3]

# 其他功能

包括:

  • 社交网络分析
  • 生物网络分析
  • 交通网络分析
  • ......
    可以参考传送门