ホームページ  >  記事  >  バックエンド開発  >  Pythonでjiebaライブラリを使用するにはどうすればよいですか?

Pythonでjiebaライブラリを使用するにはどうすればよいですか?

PHPz
PHPz転載
2023-05-09 23:10:076364ブラウズ

Jieba ライブラリ (中国語単語セグメンテーション ライブラリ) の Python での使用法とインストール チュートリアル

はじめに

jieba は、中国語単語セグメンテーション用の優れたサードパーティ ライブラリです。中国語の文章では各漢字が連続して書かれているため、単語ごとに特定の方法を使用して取得する必要があります。この方法は単語分割と呼ばれます。 Jieba は、Python コンピューティング エコシステムで中国語の単語を分割するための非常に優れたサードパーティ ライブラリであり、使用するにはインストールする必要があります。

jieba ライブラリには 3 つの単語分割モードが用意されていますが、実際には、単語分割効果を実現するには、非常にシンプルで効果的な 1 つの機能を習得するだけで十分です。

サードパーティのライブラリをインストールするには、pip ツールを使用し、コマンド ライン (IDLE ではなく) でインストール コマンドを実行する必要があります。注: Python ディレクトリとその下の Scripts ディレクトリを環境変数に追加する必要があります。

コマンド pip install jieba を使用して、サードパーティ ライブラリをインストールします。インストール後、インストールが成功したかどうかを示すメッセージが表示されます。

単語分割の原理: 簡単に言えば、jieba ライブラリは中国語語彙ライブラリを通じて単語分割を識別します。まず、中国語辞書を使用して、辞書を介して単語を構成する漢字間の関連確率を計算するため、漢字間の確率を計算することにより、単語の分割結果を形成できます。もちろん、jieba 独自の中国語語彙ライブラリに加えて、ユーザーはそれにカスタム フレーズを追加することもでき、それによって jieba の単語の分割を特定の分野での使用に近づけることができます。

jieba は Python 用の中国語単語分割ライブラリです。その使用方法は次のとおりです。

インストール

方式1:
pip install jieba
 
方式2:
先下载 http://pypi.python.org/pypi/jieba/
然后解压,运行 python setup.py install

機能

単語の分割

Jieba でよく使用される 3 つのモード:

  • 正確モード、文をテキスト分析に適した最も正確な形式に切り取ろうとします。

  • フル モードでは、文内の単語に変換できるすべての単語をスキャンします。これは非常に高速です。しかし、あいまいさは解決できません ;

  • 検索エンジン モードは、正確なモードに基づいて、長い単語を再分割して再現率を向上させ、検索エンジンの単語の分割に適しています。

単語の分割には jieba.cut メソッドと jieba.cut_for_search メソッドを使用できます。両方のメソッドから返される構造は反復可能なジェネレーターです。では、for ループを使用して単語分割後に取得した各単語 (Unicode) を取得するか、jieba.lcut および jieba.lcut_for_search を直接使用してリストを返すことができます。

jieba.Tokenizer(dictionary=DEFAULT_DICT): このメソッドを使用してトークナイザーをカスタマイズし、同時に異なる辞書を使用します。 jieba.dt はデフォルトの単語セグメンタであり、すべてのグローバル単語セグメンテーション関連関数はこの単語セグメンタのマッピングです。

jieba.cut および jieba.lcut 受け入れ可能なパラメータは次のとおりです。

  • 単語の分割が必要な文字列 ( unicode または UTF-8 文字列、GBK 文字列)

  • cut_all: フル モードを使用するかどうか。デフォルト値は False

  • HMM: HMM モデルを使用するかどうかを制御するために使用されます。デフォルト値は True

##jieba.cut_for_search および です。 jieba.lcut_for_search 2 つのパラメータを受け入れます:

  • 単語の分割が必要な文字列 (Unicode または UTF-8 文字列、GBK 文字列)

  • HMM: HMM モデルを使用するかどうかを制御するために使用されます。デフォルト値は

    True

GBK 文字列を使用しないように注意してください。予期しないデコード エラーが発生する場合があります。UTF-8 に変換します。

3 つの単語分割モードの比較:

# 全匹配
seg_list = jieba.cut("今天哪里都没去,在家里睡了一天", cut_all=True)
print(list(seg_list))  # ['今天', '哪里', '都', '没去', '', '', '在家', '家里', '睡', '了', '一天']
 
# 精确匹配 默认模式
seg_list = jieba.cut("今天哪里都没去,在家里睡了一天", cut_all=False)
print(list(seg_list))  # ['今天', '哪里', '都', '没', '去', ',', '在', '家里', '睡', '了', '一天']
 
# 精确匹配
seg_list = jieba.cut_for_search("今天哪里都没去,在家里睡了一天")
print(list(seg_list))  # ['今天', '哪里', '都', '没', '去', ',', '在', '家里', '睡', '了', '一天']

カスタマイズされた辞書

開発者は独自のカスタム辞書を指定して、jieba 辞書にない単語を含めることができます。

使用法: jieba.load_userdict(dict_path)

dict_path: カスタム辞書ファイルのパス

辞書形式は次のとおりです:

1 単語が 1 行を占めます。 ; 各行は単語、単語頻度(省略可能)、品詞(省略可能)の 3 つの部分にスペースで区切られ、順序を逆にすることはできません。

例を使って説明しましょう:

カスタム辞書 user_dict.txt:

大学コース

ディープラーニング

以下は、完全一致、完全一致、およびカスタム辞書の使用の違いを比較しています:
import jieba
 
 
test_sent = """
数学是一门基础性的大学课程,深度学习是基于数学的,尤其是线性代数课程
"""
 
words = jieba.cut(test_sent)
print(list(words))
# ['\n', '数学', '是', '一门', '基础性', '的', '大学', '课程', ',', '深度',
# '学习', '是', '基于', '数学', '的', ',', '尤其', '是', '线性代数', '课程', '\n']
 
words = jieba.cut(test_sent, cut_all=True)
print(list(words))
# ['\n', '数学', '是', '一门', '基础', '基础性', '的', '大学', '课程', '', '', '深度',
# '学习', '是', '基于', '数学', '的', '', '', '尤其', '是', '线性', '线性代数', '代数', '课程', '\n']
 
jieba.load_userdict("userdict.txt")
words = jieba.cut(test_sent)
print(list(words))
# ['\n', '数学', '是', '一门', '基础性', '的', '大学课程', ',', '深度学习', '是',
# '基于', '数学', '的', ',', '尤其', '是', '线性代数', '课程', '\n']
 
jieba.add_word("尤其是")
jieba.add_word("线性代数课程")
 
words = jieba.cut(test_sent)
print(list(words))
# ['\n', '数学', '是', '一门', '基础性', '的', '大学课程', ',', '深度学习', '是',
# '基于', '数学', '的', ',', '尤其是', '线性代数课程', '\n']

上の例からわかるように、カスタム辞書の使用とデフォルトの辞書の使用の違い。

jieba.add_word(): カスタム辞書に単語を追加します。

キーワード抽出

キーワード抽出は、TF-IDF アルゴリズムまたは TextRank アルゴリズムに基づいて行うことができます。 TF-IDF アルゴリズムは、elasticsearch で使用されるアルゴリズムと同じです。

キーワード抽出には jieba.analyse.extract_tags() 関数を使用します。パラメータは次のとおりです。

jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowedPOS=( ))

    sentence は抽出されるテキストです
  • topK は最大の重み (デフォルト値) を持つ複数の TF/IDF キーワードを返しますは 20
  • withWeight は、キーワードの重み値も返すかどうかを示します。デフォルト値は False です。
  • allowPOS には、指定された品詞。デフォルト値は空です。つまり、フィルタリングはありません
  • jieba.analyse.TFIDF(idf_path=None) 新しい TFIDF インスタンスを作成します。idf_path は IDF 周波数ですファイル###

也可以使用 jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例,idf_path 为 IDF 频率文件。

基于 TF-IDF 算法和TextRank算法的关键词抽取:

import jieba.analyse
 
file = "sanguo.txt"
topK = 12
content = open(file, 'rb').read()
 
# 使用tf-idf算法提取关键词
tags = jieba.analyse.extract_tags(content, topK=topK)
print(tags)
# ['玄德', '程远志', '张角', '云长', '张飞', '黄巾', '封谞', '刘焉', '邓茂', '邹靖', '姓名', '招军']
# 使用textrank算法提取关键词
tags2 = jieba.analyse.textrank(content, topK=topK)
 
# withWeight=True:将权重值一起返回
tags = jieba.analyse.extract_tags(content, topK=topK, withWeight=True)
print(tags)
# [('玄德', 0.1038549799467099), ('程远志', 0.07787459004363208), ('张角', 0.0722532891360849),
# ('云长', 0.07048801593691037), ('张飞', 0.060972692853113214), ('黄巾', 0.058227157790330185),
# ('封谞', 0.0563904127495283), ('刘焉', 0.05470798376886792), ('邓茂', 0.04917692565566038),
# ('邹靖', 0.04427258239705188), ('姓名', 0.04219704283997642), ('招军', 0.04182041076757075)]

上面的代码是读取文件,提取出现频率最高的前12个词。

词性标注

词性标注主要是标记文本分词后每个词的词性,使用例子如下:

import jieba
import jieba.posseg as pseg
 
# 默认模式
seg_list = pseg.cut("今天哪里都没去,在家里睡了一天")
for word, flag in seg_list:
    print(word + " " + flag)
   
"""
使用 jieba 默认模式的输出结果是:
我 r
Prefix dict has been built successfully.
今天 t
吃 v
早饭 n
了 ul
"""
 
# paddle 模式
words = pseg.cut("我今天吃早饭了",use_paddle=True)
"""
使用 paddle 模式的输出结果是:
我 r
今天 TIME
吃 v
早饭 n
了 xc
"""

paddle模式的词性对照表如下:

Pythonでjiebaライブラリを使用するにはどうすればよいですか?

补充:Python中文分词库——jieba的用法

.使用说明

jieba分词有三种模式:精确模式、全模式和搜索引擎模式。

简单说,精确模式就是把一段文本精确的切分成若干个中文单词,若干个中文单词之间经过组合就精确的还原为之前的文本,其中不存在冗余单词。精确模式是最常用的分词模式。

进一步jieba又提供了全模式,全模式是把一段中文文本中所有可能的词语都扫描出来,可能有一段文本它可以切分成不同的模式或者有不同的角度来切分变成不同的词语,那么jieba在全模式下把这样的不同的组合都挖掘出来,所以如果用全模式来进行分词,分词的信息组合起来并不是精确的原有文本,会有很多的冗余。

而搜索引擎模式更加智能,它是在精确模式的基础上对长词进行再次切分,将长的词语变成更短的词语,进而适合搜索引擎对短词语的索引和搜索,在一些特定场合用的比较多。

jieba库提供的常用函数:

  • jieba.lcut(s)

精确模式,能够对一个字符串精确地返回分词结果,而分词的结果使用列表形式来组织。例如:

>>> import jieba
>>> jieba.lcut("中国是一个伟大的国家")
Building prefix dict from the default dictionary ...
Dumping model to file cache C:\Users\ADMINI~1\AppData\Local\Temp\jieba.cache
Loading model cost 2.489 seconds.
Prefix dict has been built successfully.
['中国', '是', '一个', '伟大', '的', '国家']
  • jieba.lcut(s,cut_all=True)

全模式,能够返回一个列表类型的分词结果,但结果存在冗余。例如:

>>> import jieba 
>>> jieba.lcut("中国是一个伟大的国家",cut_all=True)
['中国', '国是', '一个', '伟大', '的', '国家']

jieba.lcut_for_search(s)

搜索引擎模式,能够返回一个列表类型的分词结果,也存在冗余。例如:

>>> import jieba
>>> jieba.lcut_for_search("中华人民共和国是伟大的")
['中华', '华人', '人民', '共和', '共和国', '中华人民共和国', '是', '伟大', '的']
  • jieba.add_word(w)

向分词词库添加新词w

最重要的就是jieba.lcut(s)函数,完成精确的中文分词。

以上がPythonでjiebaライブラリを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。