形态素分析
将文本分割为最小有意义单位 (形态素) 并赋予语法信息的处理过程。
形态素分析是自然语言处理 (NLP) 的基础技术,将文本分割为最小有意义单位 (形态素),并为每个形态素赋予词性、读音、原形、活用形等语法信息。对于日语等词与词之间没有空格的语言,这是文本处理的第一步,不可或缺。
形态素分析的原理基于词典和统计模型的组合。分析引擎对输入文本列举所有可能的分割方案,通过代价函数 (如维特比算法) 选择最自然的分割结果。例如,分析"東京都に住んでいる"会得到"東京 (名词)/都 (名词)/に (助词)/住ん (动词)/で (助词)/いる (动词)"。了解游廓 (Amazon)介绍了形态素分析的原理。
主要的形态素分析引擎包括 MeCab (C++ 实现,速度快)、kuromoji (Java 实现,被 Elasticsearch 采用)、Sudachi (Java 实现,支持多种分割粒度) 和 Janome (Python 实现,安装简便)。根据使用的词典 (IPAdic、UniDic、NEologd 等) 不同,分割结果也会不同,对新词和专有名词的识别精度存在差异。
形态素分析的应用场景非常广泛。搜索引擎在构建倒排索引前需要将文档分割为形态素。它作为基础技术被广泛用于文本工具中的词数统计、情感分析预处理、关键词提取、文档摘要和机器翻译预处理等几乎所有涉及文本处理的应用中。
一个常见的挑战是未知词 (词典中未登录的词) 的处理。新的专有名词、新造词、俚语等可能不在词典中,导致错误的分割。为解决这个问题,常见的方法是添加 NEologd 等新词词典,或创建用户词典来登录特定领域的术语。
英语可以通过空格分词,对形态素分析的需求较低。但对于 CJK 语言 (中文、日文、韩文) 来说,这是不可或缺的技术。中文使用 jieba 和 THULAC 等工具,韩文使用 KoNLPy。在字符计数方面,形态素分析不仅能计算"字符数",还能准确计算"词数"。判断一个日语句子包含多少个词需要形态素分析,这也是字符计数工具的高级功能之一。搜索无性生活 (Amazon)介绍了具体实现方法。