jieba 使用简介

2019-11-19  本文已影响0人  momo1023

分词

三种模式:全模式、精确模式、搜索引擎模式

# 全模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=True, HMM=False)
print("Full Mode: " + "/ ".join(seg_list))

# 精确模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Accurate Mode: " + "/ ".join(seg_list))

# 默认是精确模式
seg_list = jieba.cut("我来到北京清华大学")
print("Default Mode: " + "/ ".join(seg_list))

# 搜索引擎模式
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")
print("Search Engine Mode: " + ", ".join(seg_list))

输出:

Full Mode: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
Full Mode: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
Accurate Mode: 我/ 来到/ 北京/ 清华大学
Default Mode: 我/ 来到/ 北京/ 清华大学
Search Engine Mode: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, ,, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造

调整词典

print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
jieba.suggest_freq(('中', '将'), True)
print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))

输出:

如果/放到/post/中将/出错/。
如果/放到/post/中/将/出错/。
print('/'.join(jieba.cut('李小福是创新办主任也是云计算方面的专家', HMM=False)))
jieba.add_word('云计算', freq=None, tag=None)
print('/'.join(jieba.cut('李小福是创新办主任也是云计算方面的专家', HMM=False)))

输出:

李/小/福/是/创新/办/主任/也/是/云计算/方面/的/专家
李/小/福/是/创新/办/主任/也/是/云计算/方面/的/专家

用户自定义词典

词典格式:一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码

Andoid开发 222 n
user_dict = 'user_dict_jieba.txt'
jieba.del_word('Android开发')
print('/'.join(jieba.cut('李小福是创新办主任也是Android开发方面的专家', HMM=False)))
# 使用用户自定义词典
jieba.load_userdict(user_dict)
print('/'.join(jieba.cut('李小福是创新办主任也是Android开发方面的专家', HMM=False)))

输出:

李/小/福/是/创新/办/主任/也/是/Android/开发/方面/的/专家
李/小/福/是/创新/办/主任/也/是/Android开发/方面/的/专家

去除停用词

from string import punctuation
from zhon import hanzi
import re
import jieba

# 停用词
# 创建停用词列表
def get_stopwords_list(stop_words_file):
    stopwords = [line.strip() for line in open(stop_words_file, encoding='UTF-8').readlines()]
    return stopwords

# 去除标点符号(中文和英文)
def remove_punctuation(input_string):
    punc = punctuation + hanzi.punctuation
    output = re.sub(r'[{}]+'.format(punc), '', input_string)
    return output

# 对句子进行中文分词
def seg_depart(sentence):
    sentence_depart = jieba.lcut(sentence)
    return sentence_depart

# 去除停用词
def move_stopwords(sentence_list, stopwords_list):
    # 去停用词
    out_list = []
    for word in sentence_list:
        if word not in stopwords_list:
            if not remove_punctuation(word):
                continue
            if word != '\t':
                out_list.append(word)
    return out_list


if __name__ == '__main__':
    sentence = '诉讼费用全部由被告承担1234元'
    stopwords = get_stopwords_list(stop_words_file='stopwords.txt')
    sentence_depart = seg_depart(sentence)
    print('before: ' + '/'.join(sentence_depart))
    sentence_depart = move_stopwords(sentence_depart, stopwords)
    print('after: ' + '/'.join(sentence_depart))

输出:

before: 诉讼费用/全部/由/被告/承担/1234/元
after: 诉讼费用/被告/承担/1234/元
上一篇 下一篇

猜你喜欢

热点阅读