SkillAgentSearch skills...

HanziNLP

A NLP package for Chinese text:Preprocessing, Tokenization, Chinese Fonts, Word Embeddings, Text Similarity and Sentiment Analysis 轻量级中文自然语言处理软件包

Install / Use

/learn @samzshi0529/HanziNLP

README

HanziNLP

一个用户友好易于使用的自然语言处理包,专为中文文本分析、建模和可视化而设计。HanziNLP中的所有功能都支持中文文本,并且非常适用于中文文本分析!

如果HanziNLP能够帮到你,非常希望能够请你给本repository点上🌟

软件包日志:

Downloads Downloads Downloads

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的人,开发者向您表示衷心的感谢!🎉🎉🎉

关于我更多的信息和任何改进的建议,您可以通过以下方式找到我:

1. 快速开始

欢迎来到 HanziNLP 🌟 - 一个即用的中文文本自然语言处理(NLP)工具包,同时也支持英文。它旨在成为即便是Python新手也能友好使用的简化工具。

此外,HanziNLP还提供了一个交互式仪表板,用于动态洞察NLP功能,为各种NLP功能提供动态概览和洞察。

1.1 相关链接

  • GitHub仓库:在GitHub上探索我的代码并做出贡献。
  • PyPI页面:在PyPI上找到我,并探索更多关于如何将HanziNLP集成到您的项目中的信息。

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()

输出

示例图片

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
View on GitHub
GitHub Stars36
CategoryEducation
Updated3mo ago
Forks3

Languages

Python

Security Score

92/100

Audited on Dec 14, 2025

No findings