自然语言处理学习笔记(四)————词典分词

目录

1.中文分词

2.词典分词

(1)词的定义

(2)词典性质——齐夫定律

 (3)词典

(4)加载词典

 (5)hanlp词典路径


1.中文分词

  • 中文分词:指的是将一段文本拆分为一系列单词的过程,这些单词顺序拼接后等于原文本。
  • 中文分词算法大致分为基于词典规则基于机器学习这两大派。
  • 词典分词是最简单、最常见的分词算法,仅需一部词典和一套查词典的规则即可。给定一部词典,词典分词就是一个确定的查词和输出的规则系统。

2.词典分词

(1)词的定义

        在基于词典的中文分词中,词的定义要现实得多:词典中的字符串就是词。根据此定义,词典之外的字符串就不是词了。这个推论或许不符合读者的期望,但这就是词典分词故有的弱点。事实上,语言中的词汇数量是无穷的,无法用任何词典完整收录。

(2)词典性质——齐夫定律

        齐夫定律:一个单词的词频与它的词频排名成反比。就是说,虽然存在很多生词,但生词的词频较小,趋近于0,平时很难碰到。至少在常见的单词的切分上,可以放心地试一试词典分词。

 (3)词典

互联网上有许多公开的中文词库,比如

搜狗实验室发布的互联网词库(SogouW,其中有15万个词条):https://www.sogou.com/labs/resource/w.php

清华大学开放中文词库(THUOCL):http://thunlp.org

何晗发布的千万级巨型汉语词库(千万级词条):http://www.hankcs.com/nlp/corpus/tens-of-millions-of-giant-chinese-word-library-share.html

(4)加载词典

from pyhanlp import *

def load_dictionary():
    """
    加载HanLP中的mini词库
    :return: 一个set形式的词库
    """
    IOUtil = JClass('com.hankcs.hanlp.corpus.io.IOUtil')  # ①
    path = HanLP.Config.CoreDictionaryPath.replace('.txt', '.mini.txt')  # ②
    dic = IOUtil.loadDictionary([path])  # ③
    return set(dic.keySet())


if __name__ == '__main__':
    dic = load_dictionary()
    print(len(dic))
    print(list(dic)[0])

JClass 函数是连通Java和Python 的桥梁,用来根据Java路径名得到一个Python类。
①处利用JClass取得了HanLP中的IOUti1工具类,②处则取得了HanLP的配置项Config中的词典路径。我们写在配置文件中的条目最终会被读入这个结构中,比如配置文件写作CoreDictionaryPath=data/dictionary/CoreNatureDictionary.txt,该配置将被读人HanLP.Config.CoreDictionaryPath。这里我们想要加载mini 词典,因为其体积更小,加载起来更快。于是②处将这个路径替换为mini词典的路径。在③处我们像对待普通Python 工具类一样调用了IOUti1的静态方法 loadDictionary。该方法支持将多个文件读入同一个词典中,因此需要传入一个1ist。它返回一个Java Map对象,前面提到过,我们不关心Map中的值,于是我们只取它的键keySet,并将其转换为一个Python原生的set 对象。这样接下来的代码就不必考虑与Java的交互,Python用户从此回到了自己熟悉的环境中。 

 (5)hanlp词典路径

路径为:HanLP/data/dictionaray/CoreNatureDictionaray.mini.txt

 

 

你可能感兴趣的:(自然语言处理,自然语言处理,学习,笔记,hanlp,nlp,何晗,pyhanlp)