NLP之文本分词综述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文本分词综述

文本分词

介绍

分词是自然语言处理中的一个关键任务目的是将文本分解为语言单元如单词、词组等以便进一步处理。

  • 规则分词是基于词典和语法规则的分词方法通过在词典中查找词语再通过语法规则对不在词典中的词语进行处理。规则分词算法具有语言知识丰富、实现简单等特点但不能很好地处理一些未登录词OOV和新词。

  • 统计分词是基于统计模型的分词方法通过学习大量语料来建立分词模型从而解决规则分词的一些不足。统计分词算法通常使用HMM、CRF等算法能够更好地处理OOV和新词但语料要求比较高而且实现较为复杂。

  • 混合分词是规则分词和统计分词的结合它既利用了语法规则也参考了统计模型的结果。

    混合分词的流程一般如下首先用规则分词得到初步的分词结果然后再利用统计模型对规则分词的结果进行修正得到最终的分词结果。

规则分词首先我们有一个词典里面有"小明"、"是"、"一名"、"工程师"等词语然后通过语法规则比如在词典中找不到的词语就认为是一个整体对该文本进行分词得到的结果是 ["小明", "是", "一名", "AI工程师"]。

统计分词通过学习大量语料我们建立了一个统计模型这个模型学会了对中文文本进行分词当我们输入文本 "小明是一名AI工程师" 时得到的结果是 ["小明", "是", "一名", "AI", "工程师"]。

混合分词先利用规则分词技术将文本分割["小明", "是", "一名", "AI工程师"]然后再利用统计分词技术将其中"AI工程师"分割成"AI"工程师"。

从上面的结果可以看出规则分词和统计分词的区别在于统计分词更好地处理了OOV词语将 “AI工程师” 分为了 “AI” 和 “工程师” 两个词语。

混合分词的优势在于利用了两种分词方法的优点能够有效地处理复杂的分词问题获得更好的分词效果。

应用场景

NLP分词的应用场景有

  1. 文本挖掘分词是文本挖掘的前提分词结果可以作为进一步分析的基础。
  2. 语音识别分词可以提高语音识别的准确率。
  3. 情感分析分词可以方便对文本进行情感分析。
  4. 文本分类分词可以方便对文本进行分类。
  5. 文本摘要分词可以帮助生成文本摘要。
  6. 文本生成分词结果可以作为文本生成模型的输入。

常见算法

常见的NLP分词算法有

  1. 基于规则的分词如正则表达式分词、字典分词等。
  2. 基于统计的分词如HMM分词、CRF分词等。
  3. 基于深度学习的分词如Bi-LSTM分词、Transformer分词等。
  4. 基于N-gram的分词利用N-gram模型对文本进行分词。
  5. 其他还有一些特殊的分词方法如隐马尔科夫分词等。

常用的分词库

常用的NLP分词库有

  1. jieba中文分词库支持基于规则和统计的分词。
  2. NLTK自然语言处理工具包包含分词功能。
  3. StanfordNLP由斯坦福大学开发的自然语言处理工具包包含分词功能。
  4. spaCy自然语言处理工具包包含分词功能。
  5. THULAC中文分词库支持基于统计的分词。

代码demo

jieba分词

特点

jieba分词器是一种中文分词工具用于将中文文本分割为单独的词语。它采用了基于字典和统计模型的混合方法可以实现准确和高效的中文分词。

jieba分词器具有以下特点

  • 准确性高基于字典和统计模型可以识别出多种词语包括人名、地名、机构名等。
  • 可定制可以通过扩展字典调整分词策略等方式进行定制以适应不同的应用场景。
  • 性能优秀采用C++编写具有较高的运行效率。
  • 易于使用提供了Python、C++等多种语言的接口易于集成到各种应用程序中。

总的来说jieba分词器是一款功能强大性能优秀的中文分词工具广泛应用于信息检索、自然语言处理等领域。

流程

jieba分词器的实现流程大致如下

  1. 加载字典加载词典文件词典中包含了大量的常用词语。
  2. 分词将输入的文本分割为单独的词语。
  3. 初始化初始化分词结果数组。
  4. 分词算法jieba分词器采用了基于字典和统计模型的混合方法首先使用字典识别词语如果不能识别则使用统计模型进行识别。
  5. 分词策略jieba分词器支持多种分词策略例如全模式、索引模式、搜索引擎模式等。用户可以根据需求选择适合的分词策略。
  6. 返回结果将分词结果返回给用户。

总的来说jieba分词器的实现流程简单易懂具有很好的灵活性和扩展性。

demo

import jieba
text = "我是一名NLP工程师"
words = jieba.cut(text)
print(" ".join(words))

NLTK分词

特点

NLTKNatural Language Toolkit是一个用于自然语言处理的开源 Python 库。它提供了诸多的 NLP 工具其中包括分词功能。

NLTK 的分词器是基于规则分词和统计分词的混合模型实现的并可以支持多种语言。它通过使用词典、词干提取、词性标注等手段来实现对文本的分词。

NLTK 分词器的使用方法很简单只需要调用相应的 API并传入需要分词的文本即可。此外NLTK 还提供了额外的配置选项例如语言选择、分词模式选择等以满足不同的分词需求。

流程

NLTK 分词的实现流程如下

  1. 加载语料库加载大量的文本数据以便于训练统计分词模型。
  2. 预处理对文本数据进行预处理包括词干提取、词性标注等。
  3. 训练统计模型使用预处理后的文本数据训练统计分词模型以便于后续分词。
  4. 分词调用分词 API将文本分词。
  5. 后处理对分词结果进行后处理如词性标注、去除停用词等。

请注意NLTK 分词是一个非常复杂的过程它涉及到大量的 NLP 技术和算法例如规则分词、统计分词、词典、词干提取、词性标注等。

demo

import nltk
nltk.download('punkt')
from nltk.tokenize import word_tokenize
text = "我是一名NLP工程师"
words = word_tokenize(text)
print(words)

spaCy分词

特点

spaCy是一种自然语言处理库它的特点包括

  1. 快速的文本分析速度能够在线性时间内处理大量文本。
  2. 完整的语法分析包括命名实体识别、词性标注、句法分析等功能。
  3. 自定义词性标注和命名实体识别。
  4. 简单易用的API接口。
  5. 支持多种语言包括英语、德语、法语、西班牙语等。
  6. 提供丰富的文本向量化方法。

流程

spaCy的实现流程包括

  1. 读取文本数据
  2. 文本预处理包括词干提取、词性标注、语法分析
  3. 命名实体识别
  4. 文本分句、语义解析
  5. 依存句法分析
  6. 关系抽取和事件抽取等NLP任务的实现。

demo

import spacy
nlp = spacy.load("zh_core_web_sm")
text = "我是一名NLP工程师"
doc = nlp(text)
words = [token.text for token in doc]
print(words)

StanfordNLP分词

特点

StanfordNLP是一种自然语言处理工具包它的特点如下

  1. 支持多种语言包括英语、法语、德语、俄语等。
  2. 多种NLP任务包括词法分析、语法分析、命名实体识别、依存句法分析等。
  3. 精确性高通过大量训练数据和深度学习技术StanfordNLP可以提供高精确性的结果。
  4. 可扩展性强可以方便地与其他NLP工具包或模型进行集成以满足多样化的需求。

流程

StanfordNLP的实现流程大致包括以下几步

  1. 分词将文本分成单独的词语。
  2. 词性标注为每个词语标记它的词性例如名词、动词、形容词等。
  3. 命名实体识别识别文本中的命名实体例如人名、地名、机构名等。
  4. 依存句法分析识别词语在句子中的语法关系例如主语、宾语、核心词等。
  5. 语义解析识别词语的语义以了解整个句子的语义。

demo

from stanfordnlp.server import CoreNLPClient
text = "我是一名NLP工程师"
with CoreNLPClient(annotators=["tokenize"], timeout=30000, memory='4G') as client:
    ann = client.annotate(text)
words = [token.word for sent in ann.sentence for token in sent.token]
print(words)

THULAC分词

特点

THULAC分词的特点包括

  1. 兼顾分词准确性和速度是中文分词的高效工具。
  2. 采用了动态规划算法对于未登录词的识别能力强。
  3. 具有多种词性标注的功能为文本挖掘、信息提取等应用提供了更多信息。

流程

THULAC是一种基于统计和机器学习的中文分词工具。实现流程如下

  1. 数据预处理预处理语料库构建词典。
  2. 训练使用语料库训练模型。
  3. 分词对输入文本进行分词输出分词结果。
  4. 评估使用测试集评估模型性能。

demo

import thulac
thulac = thulac.thulac(seg_only=True)
text = "我是一名NLP工程师"
words = thulac.cut(text, text=True)
print(words)
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6