分词
分词其实也是个比较复杂的问题。即便是看着简单的英文文字,也可以延伸到一个复杂的课题。更何况设计到各国语言的文字。比如中文,中文分词也是个复杂的问题。后面将讨论中文分词。
分词简单的就是将一个句子分割成多个词。分词的目的就是通过这个过程提取句子中的关键字,得到其中的关键信息,理解句子的意思。分词在搜索中是一个很重要的过程。
分词最简单的就是按照句子中的分割符分割出句子中的各个词。
比如这样一个英文句子:
“Henry is utterly insupportable.”
其中文意思是:
“亨利是一个完全无法相处的人.”
对于英文来说,最简单的就是根据句子中的分割符直接分割,英文句子中的各个词都是通过空格分割,还有其他的分割符,如逗号,句号,感叹号等,这些跟中文差不多。分词的结果为:
[“Henry“ ”is“ ”utterly“ ”insupportable”]
通过标准库函数strtok和strpbrk进行分割后就可以得到上述分词结果。
https://www.iteye.com/blog/lobin-2518051
当然对上面的中文句子进行分词的话,显然不能直接像英文句子那样进行分割,因为中文句子中每个中文文字都是紧挨着的,无法直接提取到句子中的每个字,更不能直接提取到句子中的各个词出来。
后续将讨论中文分词,这里先讨论英文句子的分词。
除了上面的分词结果。英文句子其实也是语境的。有时候也需要根据语境进行分词。
上面的分词只是简单的将一个个的英文单词分割出来,包括中文分词中的那个简单例子,也只是简单的将句子中的一个个汉字给分割出来。参考中文分词的文章:
这种分词太机械,有时候我们需要将句子中的较为独立,更为关键的词、短语作为单独的分割项进行分割。比如上面的句子,我们可能更希望得到如下分词结果:
[“Henry“ ”is“ ”utterly insupportable”]
[“Henry“ ”utterly insupportable”]
[“Henry“ ”utterly“ ”insupportable”]
词典
匹配
匹配可以正向匹配,也可以逆向匹配。正向匹配就是从左到右去匹配,匹配到一个词后,再往后继续匹配,如此依次下去直到结束为止。逆向匹配正好相反,从右到左匹配,匹配到一个词后,再往前继续匹配,如此依次下去直到结束为止。
在匹配的过程中,还可以选择最大匹配和最小匹配。最大匹配尽可能匹配一个最长的词,最小匹配尽可能匹配一个最短的词。
正向匹配、逆向匹配、最大匹配以及最小匹配可以组合使用。正向匹配和逆向匹配组合可以实现双向匹配。正向匹配和最大匹配最小匹配组合就是正向最大匹配和正向最小匹配。逆向匹配和最大匹配最小匹配组合就是逆向最大匹配和逆向最小匹配。
正向匹配
正向最大匹配的例子
int libsegment_maxLeft(dict_t *dict, char *text, void **result, int *n) { str_t *t = NULL; int num = 0; while (text && *text) { int i, j; int len = strlen(text); for (i = len; i > 0; i--) { for (j = 0; j < dict->n; j++) { if (strlen(dict->ptr[j]) == i && ! strncmp(text, dict->ptr[j], i)) { break; } } if (j < dict->n) { t = realloc(t, sizeof(str_t) * ++num); t[num - 1].ptr = text; t[num - 1].len = i; text += i; break; } } // the word followed in min cann't be recorgnoized, there // have no such word in dictionary. // in this case, take the follow single as the word. if (i <= 0) { if (((unsigned char) text[0]) > 127) { t = realloc(t, sizeof(str_t) * ++num); t[num - 1].ptr = text; t[num - 1].len = 3; text += 3; } } } *result = t; *n = num; }
正向最小匹配的例子
int libsegment_minLeft(dict_t *dict, char *text, void **result, int *n) { str_t *t = NULL; int num = 0; while (text && *text) { int i, j; int len = strlen(text); for (i = 0; i < len; i++) { for (j = 0; j < dict->n; j++) { if (strlen(dict->ptr[j]) == i && ! strncmp(text, dict->ptr[j], i)) { break; } } if (j < dict->n) { t = realloc(t, sizeof(str_t) * ++num); t[num - 1].ptr = text; t[num - 1].len = i; text += i; break; } } // the word followed in min cann't be recorgnoized, there // have no such word in dictionary. // in this case, take the follow single as the word. if (i >= len) { if (((unsigned char) text[0]) > 127) { t = realloc(t, sizeof(str_t) * ++num); t[num - 1].ptr = text; t[num - 1].len = 3; text += 3; } } } *result = t; *n = num; }
逆向匹配
双向匹配
最大匹配
最小匹配
分词词库
分词库构造
中文分词
相关推荐
《中文分词与百度词典:深入理解与应用》 中文分词是自然语言处理(NLP)领域的一项基础任务,对于中文文本的理解至关重要。它涉及到将连续的汉字序列切分成具有语义意义的词语单元,是信息检索、机器翻译、情感...
基于 Java 的中文分词器分词效果评估对比项目。它主要实现了以下功能: 分词效果评估:用户可以通过程序对比不同分词器的分词结果,以及计算分词速度、行数完美率、行数错误率、字数完美率、字数错误率等指标。 ...
中文分词是中文信息处理中的关键技术之一,尤其在搜索引擎、自然语言处理和机器学习等领域扮演着至关重要的角色。"百度中文分词词库"是一个专门用于分词的资源,它包含了大量的词汇及其组合方式,为精确地将连续的...
IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载...
### 分词词库_中文分词词库最新整理(TXT格式) #### 知识点概述 本文档将根据提供的文件信息“分词词库_中文分词词库最新整理(TXT格式)”来生成相关知识点。该文件主要包含了中文分词词库的内容,通过分析这些...
描述中提到,"es提供的分词是英文分词,对于中文的分词就做的非常不好了",这意味着在处理中文文档时,ES的内置分词器可能无法满足需求。为了更好地进行中文文本的索引和检索,就需要使用专门为中文设计的分词工具,...
Java版本的结巴分词是基于Java实现的中文分词工具,它在处理中文文本时具有高效、灵活和易用的特点。结巴分词(Jieba)最初是由Python开发的,但为了满足Java开发者的需求,也有了Java版本。本文将深入探讨Java版...
《深入理解Lucene 6.6:拼音与IK中文分词技术详解》 在信息检索领域,Lucene作为一款强大的全文搜索引擎库,被广泛应用。在处理中文文本时,分词是至关重要的一步,它决定了搜索的精度和效果。本文将详细讲解如何在...
在本文中,我们讨论了分词的基本知识、分词的困难、基于字符串匹配的分词方法、基于理解的分词方法、基于统计的分词方法、最大匹配算法、最少切分算法和基于统计语言模型的分词算法等。通过对这些方法的分析,我们...
标题中的“c#中文分词类库”是指用于C#编程语言的专门处理中文文本的分词工具。分词是自然语言处理中的基础步骤,它将连续的汉字序列切分成有意义的词语,这对于搜索引擎、信息检索、文本分析等多个领域至关重要。这...
**Lucene.NET 中文分词技术详解** Lucene.NET 是一个高性能、全文检索库,它是Apache Lucene项目在.NET平台上的实现。作为一个开源的搜索引擎框架,Lucene.NET为开发者提供了强大的文本搜索功能。而在处理中文文档...
中文分词是自然语言处理(NLP)领域中的基础任务,它是将连续的汉字序列切分成具有语义意义的词语序列。在这个“中文分词数据集.zip”压缩包中,包含了一个专门用于训练中文分词模型的数据集。下面将详细讨论中文...
【标题】"Lucene.net 盘古分词C#" 涉及到的是在.NET环境中使用Lucene库进行全文检索,并结合盘古分词工具进行中文分词处理。Lucene是一个开源的全文检索库,提供了高效的索引和搜索功能。在.NET平台上,Lucene.net是...
本话题将深入探讨四种常用的Java分词工具:word分词器、ansj分词器、mmseg4j分词器以及ik-analyzer,以及它们在实际应用中的效果评估。 首先,ansj分词器是由李弄潮开发的一款开源分词工具,它具有强大的词典支持和...
标题中的“中文地址分词及匹配项目”是一个专注于处理中文地址的系统,它涉及到两个主要技术:中文地址的分词和地址匹配。分词是将连续的文本序列切分成具有独立意义的词语,而在中文环境下,由于没有明显的空格作为...
《jieba结巴分词深度解析》 在中文文本处理领域,分词是至关重要的一步,它涉及到诸如信息检索、自然语言处理、机器翻译等多个应用领域。"jieba结巴分词"是一款专为中文设计的开源分词库,以其高效、易用的特点在...
"庖丁解牛"是一款专为中文处理设计的分词工具,其版本2.0.4-alpha2提供了更稳定和高效的分词体验。这个工具的核心功能是将中文文本拆分成有意义的词语,这对于中文信息处理、自然语言理解和搜索引擎优化等场景至关...
在IT领域,分词是自然语言处理(NLP)中的基础任务,对于中文文本尤其重要。Delphi是一种流行的面向对象的编程语言,以其高效的代码执行和丰富的库支持而受到开发者的喜爱。本篇文章将深入探讨如何在Delphi环境中...
实现基于词典的分词方法和统计分词方法:两类方法中各实现一种即可; 对分词结果进行词性标注,也可以在分词的同时进行词性标注; 对分词及词性标注结果进行评价,包括4个指标:正确率、召回率、F1值和效率。 ...
**Elasticsearch 7.6.2 中文分词器详解** Elasticsearch 是一个流行的开源全文搜索引擎,它提供了一种高效、灵活的方式来存储、搜索和分析大量数据。在处理中文文档时,为了实现准确的搜索和匹配,我们需要使用特定...