HanziNLP
A NLP package for Chinese text:Preprocessing, Tokenization, Chinese Fonts, Word Embeddings, Text Similarity and Sentiment Analysis 轻量级中文自然语言处理软件包
Install / Use
/learn @samzshi0529/HanziNLPREADME
HanziNLP
一个用户友好且易于使用的自然语言处理包,专为中文文本分析、建模和可视化而设计。HanziNLP中的所有功能都支持中文文本,并且非常适用于中文文本分析!
如果HanziNLP能够帮到你,非常希望能够请你给本repository点上🌟
软件包日志:
01/05记录:
由于hugging face国内连接问题,会有可能出现软件包在本地pip install不成功的问题,建议在Google Colab上使用HanziNLP软件包。在Google Colab上使用dashboard()功能需要输入额外的这行代码来展示dashbaord:
from google.colab import output
output.enable_custom_widget_manager()
<details>
<summary>🇨🇳 Chinese Version (点击查看中文版本,由GPT-4翻译完成)</summary>
目录
开发者备注:
对于任何使用HanziNLP的人,开发者向您表示衷心的感谢!🎉🎉🎉
关于我更多的信息和任何改进的建议,您可以通过以下方式找到我:
- 个人邮箱:samzshi@sina.com
- 个人网站:https://www.samzshi.com/
- 领英:www.linkedin.com/in/zhanshisamuel
1. 快速开始
欢迎来到 HanziNLP 🌟 - 一个即用的中文文本自然语言处理(NLP)工具包,同时也支持英文。它旨在成为即便是Python新手也能友好使用的简化工具。
此外,HanziNLP还提供了一个交互式仪表板,用于动态洞察NLP功能,为各种NLP功能提供动态概览和洞察。
1.1 相关链接
1.2 安装与使用
使用HanziNLP只需执行一个简单的命令即可开始!
pip install HanziNLP
1.3 交互式仪表板

通过一行简单的代码使用 dashboard()!
from HanziNLP import dashboard
dashboard()
- 函数:
dashboard() - 目的:展示一个用户友好的仪表板,便于进行交互式文本分析和情感分类,使用户能够观察各种预训练模型和分词参数对处理文本的影响,从而选择最适合他们用例的模型和参数。
- 参数:不需要参数。
- 返回:无返回值;该函数输出一个仪表板界面。
概述
dashboard 函数引入了一个用户交互式的仪表板,旨在执行文本分析和情感分类,为用户提供亲身体验,以探索和理解不同预训练模型和分词参数对文本处理的影响。
- 交互式文本分析:用户可以输入文本,观察各种文本统计信息,例如单词计数、字符计数和句子计数,并可视化词频和情感分类结果。
- 模型探索:用户可以选择从 Hugging Face 指定一个分类模型。如果留空,则使用默认模型 'uer/roberta-base-finetuned-chinanews-chinese'。有关此模型的更多信息,请访问 Hugging Face。
- 分词参数调整:用户可以调整分词设置,例如 'Jieba Mode' 参数和停用词选择,并观察生成的词语及其各自的频率。
- 可视化:仪表板提供了文本统计、词频和情感分类的视觉洞察,帮助用户理解文本分析结果。
- 情感分类:仪表板使用指定的(或默认的)模型执行情感分类,并显示情感标签的概率分布。
亮点
dashboard 函数强调用户参与和探索。它允许用户与各种预训练模型和分词参数进行交互式交流,观察它们对文本分析和情感分类的影响。这种交互式探索使用户能够做出明智的决策,选择最符合他们特定用例的模型和参数,从而增强他们的文本分析和自然语言处理(NLP)任务。
2. 字符和词汇计数
🚀 这个基本功能计算文本中的字符和单词数量,省去了您自己识别和分割中文单词的手动努力。
char_freq 和 word_freq 函数
char_freq(text, text_only=True): 函数用于计算给定文本中每个字符的频率;如果 text_only == True,只会计算中文和英文字符。如果 text_only == False,将计算所有字符。默认为 True。word_freq(text): 函数用于计算给定文本中每个单词的频率。
示例
from HanziNLP import char_freq, word_freq
text = "你好, 世界!"
char_count = char_freq(text)
word_count = word_freq(text)
print(f"字符计数: {char_count}")
print(f"单词计数: {word_count}")
输出
字符计数: 4
单词计数: 2
3. 字体管理
在Python环境中可视化中文文本时,字体是一个经常需要手动导入的重要资源。HanziNLP内置了字体列表,可立即使用。您可以使用list_fonts()查看和过滤所有可用的字体,并使用get_font()检索用于可视化目的的特定字体路径。所有内置的字体都来自Google字体,它们根据开放字体许可证获得许可,这意味着您可以在产品和项目中使用它们——无论是印刷品还是数字品,无论是商业的还是其他的。
list_fonts 和 get_font 函数
list_fonts(): 列出所有可用的字体。get_font(font_name, show=True): 检索用于可视化目的的特定字体。如果 show == True,将显示字体的样本可视化。如果 show == False,将不显示任何内容。默认设置为True。
list_fonts() 示例
from HanziNLP import list_fonts
# 列出所有可用的字体
list_fonts()
输出
.png)
get_font() 示例
from HanziNLP import get_font
font_path = get_font('ZCOOLKuaiLe-Regular') #在 list_fonts() 中输入您喜欢的 font_name
输出

词云示例
您可以使用定义的中文 font_path 制作各种图表。下面提供了一个词云示例:
from PIL import Image
from wordcloud import WordCloud,ImageColorGenerator
import matplotlib.pyplot as plt
# 由GPT-4生成的样本文本
text = '在明媚的春天里,小花猫咪悠闲地躺在窗台上,享受着温暖的阳光。她的眼睛闪烁着好奇的光芒,时不时地观察着窗外忙碌的小鸟和蝴蝶。小猫的尾巴轻轻摇动,表达着她内心的舒适和满足。在她的身边,一盆盛开的紫罗兰散发着淡淡的香气,给这个宁静的午后增添了几分诗意。小花猫咪偶尔会闭上她的眼睛,沉浸在这美好的时光中,仿佛整个世界都变得温馨和谐。窗外的樱花树在微风中轻轻摇曳,洒下一片片粉色的花瓣,如梦如幻。在这样的一个悠托的春日里,一切都显得如此美好和平静。'
text = " ".join(text)
# 生成词云
wordcloud = WordCloud(font_path= font_path, width=800, height=800,
background_color='white',
min_font_size=10).generate(text)
# 显示词云
plt.figure(figsize=(5, 5), facecolor=None)
plt.imshow(wordcloud)
plt.axis("off")
plt.tight_layout(pad=0)
plt.title("样本词云")
plt.show()
输出

4. 文本分段
文本分段是任何NLP任务中的一个关键步骤。一般的步骤是分段句子,去除停用词,并分别对每个句子进行分词。下面介绍了详细的说明。
4.1 停用词管理
为了在中文文本中去除停用词,该包内置了常见的停用词列表,包括以下几个:(部分停用词来自stopwords)
| 停用词列表 | 文件名 | |----------|----------| | 中文停用词表 | cn_stopwords.txt | | 哈工大停用词表 | hit_stopwords.txt | | 百度停用词表 | baidu_stopwords.txt | | 四川大学机器智能实验室停用词表 | scu_stopwords.txt | | 常用停用词表 | common_stopwords.txt |
list_stopwords 和 load_stopwords 函数
list_stopwords(): 列出所有可用的停用词。load_stopwords(file_name): 从指定的文件加载停用词到一个词列表。然后,您可以查看并在后续使用中使用这些停用词。
list_stopwords 示例
from HanziNLP import list_stopwords
list_stopwords()
输出

load_stopwords 示例
from HanziNLP import load_stopwords
stopwords = load_stopwords('common_stopwords.txt') # 在这里输入txt文件名
输出
{'然而',
'whoever',
'只限',
'的确',
'要不然',
'each',
'仍旧',
'这么点儿',
'冒',
'如果',
'比及',
'以期',
'犹自'.....
}
4.2 句子分段
此功能将整个文档或段落分段成句子。支持中文和英文文本。
sentence_segment(text): 将输入文本分段成句子。
sentence_segment 示例:此示例故意选择一个难以分割的句子。
from HanziNLP import sentence_segment
sample_sentence = 'hello world! This is Sam.。 除非你不说。我今天就会很开心,hello .you。'
sentence_segment(sample_sentence)
输出
['hello world!', 'This is Sam.', '。', '除非你不说。', '我今天就会很开心,hello .', 'you。']
4.3 词语标记
作为预处理文本用于NLP任务的最重要步骤之一,word_tokenize() 函数提供了一种直接将原始中文文本转换为标记的方法。
- 函数:
word_tokenize(text, mode='precise', stopwords='common_stopwords.txt', text_only=False, include_numbers=True, custom_stopwords=None, exclude_default_stopwords=False) - 目的:将输入文本标记为词,同时提供有效管理停用词的选项。
参数:
text(str): 输入的中文文本。mode(str, 可选): 标记模式,可从 'all', 'precise' 或 'search_engine' 中选择。默认为 'precise'。stopwords(str, 可选): 指示要使用的停用词文件的文件名字符串。默认为 'common_stopwords.txt'。text_only(bool, 可选): 如果为 True,则仅标记英文和中文文本。默认为 False。include_numbers(bool, 可选): 如果为 True,则在标记的输出中包含数字。默认为 True。custom_stopwords(str 列表, 可选): 要删除的自定义停用词列表。默认为 None。exclude_default_stopwords(bool, 可选): 如果为 True,则排除默认的停用词。默认为 False。
返回:
list: 根据指定的参数删除停用词后的标记列表。
示例 1:
from HanziNLP import word_tokenize
sample = '除非你不说,我今天就会很开心,hello you#$@#@*' # 一个故意用于标记化的困难文本
token = word_tokenize(sample, mode='precise', stopwords='baidu_stopwords.txt', text_only=False,
include_numbers=True, custom_stopwords=None, exclude_default_stopwords=False)
token
输出
['不', '说', ',', '会', '很', '开心', ',', '#', '$', '@', '#', '@', '*']
示例 2:将 text_only 设置为 True 并将 custom_stopwords 设置为 ['开心']
from HanziNLP import word_tokenize
sample = '除非你不说,我今天就会很开心,hello you#$@#@*'# 一个故意用于标记化的困难文本
token = word_tokenize(sample, mode='precise', stopwords='baidu_stopwords.txt', text_only=True,
include_numbers=True, custom_stopwords=['开心'], exclude_default_stopwords=False)
token
输出:已删除特殊字符和单词 '开心'
['不', '说', '会', '很']
5. 文本表示
构建文本特征图是各种机器学习或深度学习任务的起点。HanziNLP已整合了可以轻松实现的常见特征图方法。
5.1 词袋模型 (BoW)
- 函数:
BoW(segmented_text_list) - 目的:从一系列分段文本中生成词袋模型表示。
- 参数:
segmented_text_list(str 列表):包含分段文本的列表。
- 返回:
dict:表示词频的字典。
示例
from HanziNLP import word_tokenize, BoW
sample_sentence = 'hello world! This is Sam.。 除非你不说。我今天就会很开心,hello .you。'
token = word_tokenize(sample_sentence, text_only = True)
bow = BoW(token)
bow
输出
{'hello': 2, 'world': 1, 'This': 1, 'Sam': 1, '说': 1, '今天': 1, '会': 1, '开心': 1}
5.2 ngrams
- 函数:
ngrams(tokens, n=3) - 目的:从标记列表中创建并计算n-grams的频率。
- 参数:
tokens(列表):标记列表。n(int, 可选):n-grams的数字。默认为3(trigrams)。
- 返回:
dict:以n-grams为键,其频率为值的字典。
示例
from HanziNLP import word_tokenize, ngrams
sample_sentence = 'hello world! This is Sam.。 除非你不说。我今天就会很开心,hello .you。'
token = word_tokenize(sample_sentence, text_only = True)
ngram = ngrams(token, n =3)
ngram
输出
{'hello world This': 1,
'world This Sam': 1,
'This Sam 说': 1,
'Sam 说 今天': 1,
'说 今天 会': 1,
'今天 会 开心': 1,
'会 开心 hello': 1}
5.3 TF_IDF (词频-逆文档频率)
- 函数:
TF_IDF(text_list, max_features=None, output_format='sparse') - 目的:将文本列表转换为TF-IDF表示。
- 参数:
text_list(str 列表):要转换的标记列表。max_features(int, 可选):要提取的最大特征(术语)数量。默认为None(所有特征)。output_format(str, 可选):输出矩阵的格式('sparse','dense' 或 'dataframe')。默认为'sparse'。
- 返回:
matrix:指定格式的TF-IDF矩阵。feature_names:特征名称列表。
示例
from HanziNLP import word_tokenize, TF_IDF
sample_sentence = 'hello world! This is Sam.。 除非你不说。我今天就会很开心,hello .you。'
token = word_tokenize(sample_sentence, text_only = True)
tfidf_matrix, feature_names = TF_IDF(token, output_format = 'dataframe')
tfidf_matrix
输出

5.4 TT_matrix (词-词矩阵)
- 函数:`TT_matrix(tokenized_text
