pecab

pecab

纯Python实现的高效韩语形态素分析工具

Pecab是一个基于Mecab的纯Python韩语形态素分析工具,保留了Mecab的高速和准确性,同时简化了安装流程。该工具提供形态素分割、词性标注和名词提取等功能,并采用零拷贝内存映射和双数组字典树技术,显著提升了加载速度并降低了内存占用。Pecab为韩语自然语言处理提供了一个高效且易于使用的解决方案。

Pecab形态素分析自然语言处理Python库韩语分析Github开源项目

Pecab

<a href="https://github.com/hyunwoongko/pecab/releases"><img alt="GitHub 发布" src="https://yellow-cdn.veclightyear.com/835a84d5/b07b6fc2-e4d5-427a-86c7-4152351551bc.svg" /></a> <a href="https://github.com/hyunwoongko/pecab/issues"><img alt="问题" src="https://img.shields.io/github/issues/hyunwoongko/pecab"/></a> Windows 操作状态 Ubuntu 操作状态 macOS 操作状态

Pecab 是一个基于 Mecab 的纯 Python 韩语形态素分析器。 Mecab 是 Taku Kudo 在 2011 年开发的基于 CRF 的形态素分析器。它既快速又准确,这就是为什么尽管它相当老旧,但仍然非常受欢迎的原因。 然而,它被认为是安装最棘手的库之一,事实上许多人在安装 Mecab 时都遇到了困难。

因此,从几年前开始,我就想制作一个纯 Python 版本的 Mecab,既易于安装又能继承 Mecab 的优点。 现在,Pecab 问世了。它确保了与 Mecab 非常相似的结果,同时易于安装。 更多详情,请参考以下内容。

安装

pip install pecab

使用方法

Pecab 的用户 API 受到 KoNLPy 的启发, KoNLPy 是韩国最著名的自然语言处理包之一。

1) PeCab(): 创建 Pecab 对象。

from pecab import PeCab pecab = PeCab()

2) morphs(text): 将文本分割为形态素。

pecab.morphs("아버지가방에들어가시다") ['아버지', '가', '방', '에', '들어가', '시', '다']

3) pos(text): 返回形态素及其词性标签。

pecab.pos("이것은 문장입니다.") [('이것', 'NP'), ('은', 'JX'), ('문장', 'NNG'), ('입니다', 'VCP+EF'), ('.', 'SF')]

4) nouns(text): 返回输入文本中的所有名词。

pecab.nouns("자장면을 먹을까? 짬뽕을 먹을까? 그것이 고민이로다.") ["자장면", "짬뽕", "그것", "고민"]

5) Pecab(user_dict=List[str]): 应用用户词典。

注意,用户词典中包含的词不能包含空格

  • 不使用 user_dict
from pecab import PeCab pecab = PeCab() pecab.pos("저는 삼성디지털프라자에서 지펠냉장고를 샀어요.") [('저', 'NP'), ('는', 'JX'), ('삼성', 'NNP'), ('디지털', 'NNP'), ('프라자', 'NNP'), ('에서', 'JKB'), ('지', 'NNP'), ('펠', 'NNP'), ('냉장고', 'NNG'), ('를', 'JKO'), ('샀', 'VV+EP'), ('어요', 'EF'), ('.', 'SF')]
  • 使用 user_dict
from pecab import PeCab user_dict = ["삼성디지털프라자", "지펠냉장고"] pecab = PeCab(user_dict=user_dict) pecab.pos("저는 삼성디지털프라자에서 지펠냉장고를 샀어요.") [('저', 'NP'), ('는', 'JX'), ('삼성디지털프라자', 'NNG'), ('에서', 'JKB'), ('지펠냉장고', 'NNG'), ('를', 'JKO'), ('샀', 'VV+EP'), ('어요', 'EF'), ('.', 'SF')]

6) PeCab(split_compound=bool): 将复合词分解为更小的单位。

from pecab import PeCab pecab = PeCab(split_compound=True) pecab.morphs("가벼운 냉장고를 샀어요.") ['가볍', 'ᆫ', '냉장', '고', '를', '사', 'ㅏㅆ', '어요', '.']

7) ANY_PECAB_FUNCTION(text, drop_space=bool):决定是否返回空格。

这可用于所有的morphsposnouns函数。此参数的默认值为True

from pecab import PeCab pecab = PeCab() pecab.pos("토끼정에서 크림 우동을 시켰어요.") [('토끼', 'NNG'), ('정', 'NNG'), ('에서', 'JKB'), ('크림', 'NNG'), ('우동', 'NNG'), ('을', 'JKO'), ('시켰', 'VV+EP'), ('어요', 'EF'), ('.', 'SF')] pecab.pos("토끼정에서 크림 우동을 시켰어요.", drop_space=False) [('토끼', 'NNG'), ('정', 'NNG'), ('에서', 'JKB'), (' ', 'SP'), ('크림', 'NNG'), (' ', 'SP'), ('우동', 'NNG'), ('을', 'JKO'), (' ', 'SP'), ('시켰', 'VV+EP'), ('어요', 'EF'), ('.', 'SF')]

实现细节

事实上,之前已经有一个纯Python实现的韩语形态素分析器。它的名字是Pynori。 我一直在使用Pynori,非常感谢Pynori的开发者。 然而,Pynori存在一些需要改进的问题。 所以我开始以其代码库为基础制作Pecab,并专注于解决这些问题。

1) 加载速度提高50~100倍,内存使用量更少

当我们创建Pynori对象时,它会从磁盘读取矩阵和词汇文件,并在运行时构建一个Trie树。 然而,这是一个相当重的任务。事实上,当我第一次运行Pynori时,我的电脑几乎冻结了10秒钟。 所以我通过两个关键思想解决了这个问题:1) 零拷贝内存映射2) 双数组Trie系统

第一个关键思想是零拷贝内存映射。 这允许虚拟内存(磁盘)中的数据几乎不需要复制到内存就能直接使用。 事实上,Pynori需要接近5秒的时间将mecab_csv.pkl文件加载到内存中,这带来了很大的负担。 我设计了使用numpy.memmap保存矩阵文件,使用可内存映射的pyarrow.Table保存词汇。

然而,在设计这个过程中遇到了一个问题。 Pynori中使用的Trie数据结构很难以内存映射的形式存储。 实际上,numpy只能很好地支持数组和矩阵,而pyarrow在大多数情况下只支持表格。 因此,我最初想用表格形式代替Trie。 但是,表格索引特定键的时间复杂度是线性的O(n), 所以实际的搜索时间可能会比以前长得多。 因此,第二个关键思想是双数组Trie(DATrie)。 与一般的Trie不同,DATrie只有两个简单的整数数组(base和check),而不是复杂的基于节点的结构, 所有的键都可以通过它们轻松检索。而这两个数组非常容易用内存映射创建! 双数组Trie可以很容易地保存在内存映射文件中,所以这是我最好的选择之一。 我本想用Python实现所有内容以便于安装包,但遗憾的是我找不到纯Python实现的DATrie源代码。 所以我自己制作了纯Python版本,你可以在这里找到实现。

总之,读取这两个文件所需的时间比以前减少了50~100倍, 由于它们实际上不驻留在内存中,内存消耗也显著减少。

2) 用户友好和Pythonic的API

使用Pynori时我遇到的另一个困难是用户API。 它有一个相当类Java的API和表达方式,为了使用它,我必须在创建主对象时传递许多参数。 然而,我希望使它像Mecab一样非常容易使用,并且不需要用户自己解析输出。 所以我思考了API,最终决定采用类似于用户已经熟悉的KoNLPy的API。 我相信这些API更加用户友好,将使库更容易使用。

许可证

Pecab项目在Apache License 2.0条款下授权。

Copyright 2022 Hyunwoong Ko.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多