分词
三种模式:全模式、精确模式、搜索引擎模式
# 全模式
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: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, ,, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造
调整词典
- 使用
suggest_freq(segment, tune=True)
可调节单个词语的词频,使其能(或不能)被分出来
print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
jieba.suggest_freq(('中', '将'), True)
print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
输出:
如果/放到/post/中将/出错/。
如果/放到/post/中/将/出错/。
- 使用
add_word(word, freq=None, tag=None)
和del_word(word)
可在程序中动态修改词典
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/元
网友评论