`
lobin
  • 浏览: 417358 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

分词

分词其实也是个比较复杂的问题。即便是看着简单的英文文字,也可以延伸到一个复杂的课题。更何况设计到各国语言的文字。比如中文,中文分词也是个复杂的问题。后面将讨论中文分词。

 

分词简单的就是将一个句子分割成多个词。分词的目的就是通过这个过程提取句子中的关键字,得到其中的关键信息,理解句子的意思。分词在搜索中是一个很重要的过程。

 

分词最简单的就是按照句子中的分割符分割出句子中的各个词。

比如这样一个英文句子:

“Henry is utterly insupportable.”

其中文意思是:

“亨利是一个完全无法相处的人.”

 

对于英文来说,最简单的就是根据句子中的分割符直接分割,英文句子中的各个词都是通过空格分割,还有其他的分割符,如逗号,句号,感叹号等,这些跟中文差不多。分词的结果为:

[“Henry“ ”is“ ”utterly“ ”insupportable”]

 

通过标准库函数strtok和strpbrk进行分割后就可以得到上述分词结果。

写道

 

 

 

当然对上面的中文句子进行分词的话,显然不能直接像英文句子那样进行分割,因为中文句子中每个中文文字都是紧挨着的,无法直接提取到句子中的每个字,更不能直接提取到句子中的各个词出来。

 

后续将讨论中文分词,这里先讨论英文句子的分词。

 

除了上面的分词结果。英文句子其实也是语境的。有时候也需要根据语境进行分词。

 

上面的分词只是简单的将一个个的英文单词分割出来,包括中文分词中的那个简单例子,也只是简单的将句子中的一个个汉字给分割出来。参考中文分词的文章:

写道

这种分词太机械,有时候我们需要将句子中的较为独立,更为关键的词、短语作为单独的分割项进行分割。比如上面的句子,我们可能更希望得到如下分词结果:

[“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;
}

 

 

逆向匹配

 

双向匹配

 

最大匹配

 

最小匹配

 

 

分词词库

 

分词库构造

 

 

中文分词

写道

 

 

 

 

0
1
分享到:
评论

相关推荐

    baidu.rar_ baidu_dictionary_中文分词_中文分词 词典_分词词典

    《中文分词与百度词典:深入理解与应用》 中文分词是自然语言处理(NLP)领域的一项基础任务,对于中文文本的理解至关重要。它涉及到将连续的汉字序列切分成具有语义意义的词语单元,是信息检索、机器翻译、情感...

    百度中文分词词库

    中文分词是中文信息处理中的关键技术之一,尤其在搜索引擎、自然语言处理和机器学习等领域扮演着至关重要的角色。"百度中文分词词库"是一个专门用于分词的资源,它包含了大量的词汇及其组合方式,为精确地将连续的...

    分词词库_中文分词词库最新整理(TXT格式)

    ### 分词词库_中文分词词库最新整理(TXT格式) #### 知识点概述 本文档将根据提供的文件信息“分词词库_中文分词词库最新整理(TXT格式)”来生成相关知识点。该文件主要包含了中文分词词库的内容,通过分析这些...

    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智能分词器下载8.12.2版本IK智能分词器下载...

    es7.0 ik的分词器

    描述中提到,"es提供的分词是英文分词,对于中文的分词就做的非常不好了",这意味着在处理中文文档时,ES的内置分词器可能无法满足需求。为了更好地进行中文文本的索引和检索,就需要使用专门为中文设计的分词工具,...

    java版本结巴分词

    Java版本的结巴分词是基于Java实现的中文分词工具,它在处理中文文本时具有高效、灵活和易用的特点。结巴分词(Jieba)最初是由Python开发的,但为了满足Java开发者的需求,也有了Java版本。本文将深入探讨Java版...

    c#中文分词类库 可用来做搜索引擎分词 准确率90% 支持Lucene.net

    标题中的“c#中文分词类库”是指用于C#编程语言的专门处理中文文本的分词工具。分词是自然语言处理中的基础步骤,它将连续的汉字序列切分成有意义的词语,这对于搜索引擎、信息检索、文本分析等多个领域至关重要。这...

    lucene.NET 中文分词

    **Lucene.NET 中文分词技术详解** Lucene.NET 是一个高性能、全文检索库,它是Apache Lucene项目在.NET平台上的实现。作为一个开源的搜索引擎框架,Lucene.NET为开发者提供了强大的文本搜索功能。而在处理中文文档...

    中文分词数据集.zip

    中文分词是自然语言处理(NLP)领域中的基础任务,它是将连续的汉字序列切分成具有语义意义的词语序列。在这个“中文分词数据集.zip”压缩包中,包含了一个专门用于训练中文分词模型的数据集。下面将详细讨论中文...

    中文地址分词及匹配项目

    标题中的“中文地址分词及匹配项目”是一个专注于处理中文地址的系统,它涉及到两个主要技术:中文地址的分词和地址匹配。分词是将连续的文本序列切分成具有独立意义的词语,而在中文环境下,由于没有明显的空格作为...

    jieba结巴分词.zip

    《jieba结巴分词深度解析》 在中文文本处理领域,分词是至关重要的一步,它涉及到诸如信息检索、自然语言处理、机器翻译等多个应用领域。"jieba结巴分词"是一款专为中文设计的开源分词库,以其高效、易用的特点在...

    elasticsearch-ik中文分词器7.6.2.zip

    **Elasticsearch 7.6.2 中文分词器详解** Elasticsearch 是一个流行的开源全文搜索引擎,它提供了一种高效、灵活的方式来存储、搜索和分析大量数据。在处理中文文档时,为了实现准确的搜索和匹配,我们需要使用特定...

    基于Python实现的词典分词方法或统计分词方法.zip

    实现基于词典的分词方法和统计分词方法:两类方法中各实现一种即可; 对分词结果进行词性标注,也可以在分词的同时进行词性标注; 对分词及词性标注结果进行评价,包括4个指标:正确率、召回率、F1值和效率。 ...

    最新中文地址分词及匹配

    在大数据处理领域,中文地址的分词和匹配是一项至关重要的任务。这主要涉及到如何将复杂的中文地址有效地拆分成有意义的词汇单元,以及如何判断两个地址的相似性,从而实现准确的地址匹配。以下是对这些知识点的详细...

    结巴分词jar包

    “结巴”中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module. Scroll down for English ...

    jieba分词工具包下载

    jieba分词工具是Python中广泛使用的中文分词库,尤其在自然语言处理(NLP)领域中扮演着重要角色。这个工具包提供了一个高效、易用的接口,能够对中文文本进行精确、全模式和搜索引擎模式的分词。jieba库支持动态...

    ik分词器tar包 7.10.2

    **IK分词器详解** IK分词器是针对Elasticsearch(ES)的一款热门中文分词插件,其全称为“Intelligent Chinese Analyzer for Elasticsearch”。它由Java编写,旨在为中文文档提供高效、准确的分词处理。版本7.10.2...

    中文分词词库整理.7z

    中文分词是自然语言处理(NLP)领域中的基础任务,它是将连续的汉字序列切分成具有语义意义的词语序列。在这个“中文分词词库整理.7z”压缩包中,包含的可能是一个精心整理的中文词汇集合,用于支持各种中文分词算法...

    日文分词系统mecab的中文讲解

    mecab是一款由奈良先端科学技术大学院的工藤拓开发的日文分词系统,其开发者工藤拓是著名的machine learning领域的软件开发者,特别是他的CRF++工具,在自然语言处理(NLP)领域广受欢迎。工藤拓目前在Google日本...

Global site tag (gtag.js) - Google Analytics