文本分析3-jieba分词

笔记来自课程:玩转文本挖掘(51ct0学院),总结整理为个人学习、复习使用,供参考。


在这里插入图片描述
分词思想和工具也有很多,这里先只学习jeiba分词。

jieba分词

三种分词模式

  • 精确模式:试图将句子最精确分开,适合做文本分析(默认精确模式)
  • 全模式:把句子中所有可以成词的词语扫描出来,速度快,但不能解决歧义
  • 搜索引擎模式:在精确模式基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词(考虑了搜索引擎的需求,主要是为了提高搜索引擎的命中率)

另外,也支持繁体分词和自定义词典

基本使用
import jieba
import warnings
warnings.filterwarnings('ignore')

tmpstr='郭靖和哀牢山三十六剑,'
res=jieba.cut(tmpstr)  #默认精确模式

print(res)
#是一个可迭代的generator,可用for循环遍历结果,类似与list
print('/'.join(res))

郭靖/和/哀牢山/三十六/剑/,
<generator object Tokenizer.cut at 0x000000000B5758C8>

分词结果输出为列表
#将循环generator转化为列表
res=jieba.cut(tmpstr)
list(word for word in res)

[‘郭靖’, ‘和’, ‘哀牢山’, ‘三十六’, ‘剑’, ‘,’]

#直接使用lcut
print(jieba.lcut(tmpstr))

[‘郭靖’, ‘和’, ‘哀牢山’, ‘三十六’, ‘剑’, ‘,’]

其他模式
print('/'.join(jieba.cut(tmpstr,cut_all=True))) #全模式

郭/靖/和/哀牢山/三十/三十六/十六/剑/,

print('/'.join(jieba.cut_for_search(tmpstr))) #搜索引擎模式

print(jieba.lcut_for_search(tmpstr)) #列表形式

郭靖/和/哀牢山/三十/十六/三十六/剑/,
[‘郭靖’, ‘和’, ‘哀牢山’, ‘三十’, ‘十六’, ‘三十六’, ‘剑’, ‘,’]

修改词典

想要灵活分词,可以对分词的词典进行补充或调整,有三种形式:动态增删新词,使用自定义词典,使用现有词库

动态增删新词

即根据分词结果,对内存中的词库进行更新

  • add_word(word) :word-新词;freq=None-词频;tag=None-词性
  • del_word(word)
jieba.add_word('哀牢山三十六剑')
'/'.join(jieba.cut(tmpstr))

‘郭靖/和/哀牢山三十六剑/,’

jieba.del_word('哀牢山三十六剑')
'/'.join(jieba.cut(tmpstr))

‘郭靖/和/哀牢山/三十六/剑/,’

使用自定义词典

当有很多自定义词需要添加时,可以事先建立一个词库,使用自定义词典进行分词

  • load_userdict(file_name)

词典基本格式:

一个词一行:词、词频(可省)、词性(可省)

用空格隔开,词典文件必须使用UTF-8编码(必要时使用Uedit32进行文件编码转换)

import os
#os.chdir(r'')

dict='金庸小说词库.txt'
jieba.load_userdict(dict)

'/'.join(jieba.cut(tmpstr))

‘郭靖/和/哀牢山三十六剑/,’

搜狗词库

搜狗词库

按照词库分类或者关键词搜索方式,查找并下载所需词库,不需要自己从头制作词库,可以按需加入。

文件为scel格式,可使用转换工具,将其转换为txt格式(应用程序)

  • 深蓝词库转换
  • 奥创词库转换

去除停用词

常见停用词

  • 超高频:基本不携带有效信息/歧义太多–的、地、得…
  • 虚词:如介词,连词…
  • 专业领域高频词:基本不携带有效信息(仅在某一场景下适用)
  • 视情况而定:呵呵、emoj…
分词后去除停用词
  1. 读入停用词表文件
  2. 正常分词
  3. 在分词结果中去除:
    新列表=[word for word in 源列表 if word not in 停用词表]

但存在的问题:停用词必须要被分词过程正确拆分才行。

newlist=[w for w in jieba.cut(tmpstr) if w not in ['和',',']]
print(newlist)

[‘郭靖’, ‘哀牢山三十六剑’]

import pandas as pd
tmpdf=pd.read_csv('停用词.txt',names=['w'],sep='aaa',
                 encoding='utf-8')


[w for w in jieba.cut(tmpstr) if w not in list(tmpdf.w)] #list转化为列表

[‘郭靖’, ‘哀牢山三十六剑’]

用extract_tags函数去除停用词

特点:

根据TF-IDF算法将特征词取出来,在提取之前去掉停用词(这里就不用考虑分词是否分得合适的问题,相对准确率更高)

可以人工指定停用词典

jieba.analyse.set_stop_words()

import jieba.analyse as ana
print('未使用:',jieba.lcut(tmpstr)) 

#使用TF_IDF算法提取关键词,并同时去掉停用词
ana.set_stop_words('停用词.txt')
print('TF_IDF提取关键词:',ana.extract_tags(tmpstr,topK=20))

未使用: [‘郭靖’, ‘和’, ‘哀牢山三十六剑’, ‘,’]
TF_IDF提取关键词: [‘郭靖’, ‘哀牢山三十六剑’]

词性标注

结巴分词中的函数: import jieba.posseg

posseg.cut( ):给出附加词性的分词结果(词性标注采用和 ICTCLAS 兼容的标记法)

可以词性做进一步处理,如只提名词或动词等…

import jieba.posseg as psg

tmpres=psg.cut(tmpstr) #附加词性的分词结果
print(tmpres)

for item in tmpres:
    print(item.word,item.flag)

在这里插入图片描述
这里的x是未定义词性,因为“郭靖”“哀牢山三十六剑”是自定义词典加进去的,加进去的时候没有定义词性,如果自定义词典里面有指定,那么会输出词性。

psg.lcut(tmpstr) #直接输出为list,成员为pair

[pair(‘郭靖’, ‘x’), pair(‘和’, ‘c’), pair(‘哀牢山三十六剑’, ‘x’), pair(’,’, ‘x’)]

print(psg.lcut(tmpstr)[1].word)
print(psg.lcut(tmpstr)[1])
psg.lcut(tmpstr)[1]


和/c
pair(‘和’, ‘c’)

分词的NLTK实现

NLTK只能识别用空格作为词条分割方式,因此不能直接用于中文文本分词

一般先用jieba分词,然后转换为空格分割的连续文本,再转入NLTK框架使用

rawtext='世界那么大,我想去看看'
txt=' '.join(jieba.cut(rawtext))
print(txt)

import nltk
toke=nltk.word_tokenize(txt)
print(toke)

世界 那么 大 , 我 想 去 看看
[‘世界’, ‘那么’, ‘大’, ‘,’, ‘我’, ‘想’, ‘去’, ‘看看’]

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文本挖掘是指从大量文本数据中自动提取出有用的信息和知识的过程。而jieba分词是一种常用的中文分词工具,可以将中文文本按照词语切分成若干个词汇,从而为文本挖掘提供了基础。 以下是用jieba分词进行文本挖掘的步骤: 1. 导入jieba库 ``` import jieba ``` 2. 加载文本数据 假设我们有一个文本文件,名为“data.txt”,其中包含一些中文文本数据。我们可以使用以下代码将文本数据读入程序中: ``` with open('data.txt', 'r', encoding='utf-8') as f: text = f.read() ``` 3. 对文本数据进行分词 使用jieba分词对文本数据进行分词,得到词语列表: ``` words = jieba.lcut(text) ``` 4. 进行文本挖掘 利用分词得到的词语列表进行文本挖掘。常见的文本挖掘任务包括: - 关键词提取:从文本中提取出关键词,用于文本分类、聚类等任务。 ``` import jieba.analyse # 提取前10个关键词及其权重 keywords = jieba.analyse.extract_tags(text, topK=10, withWeight=True) for keyword, weight in keywords: print(keyword, weight) ``` - 情感分析:判断文本的情感倾向,如积极、消极或中性。 ``` import jieba.sentiment # 加载情感分析模型 jieba.sentiment.analyse.set_sentiment_file('sentiment.txt') # 获取文本的情感倾向 sentiment_score = jieba.sentiment.analyse.sentiment(text) if sentiment_score > 0: print('这是一篇积极的文章') elif sentiment_score < 0: print('这是一篇消极的文章') else: print('这是一篇中性的文章') ``` - 主题建模:从文本中提取出主题,用于文本分类、聚类等任务。 ``` import jieba.analyse from gensim import corpora, models # 提取关键词列表 keywords = jieba.analyse.extract_tags(text, topK=10) # 构建语料库 corpus = [jieba.lcut(sentence) for sentence in text.split('\n')] # 构建词袋模型 dictionary = corpora.Dictionary(corpus) corpus_bow = [dictionary.doc2bow(sentence) for sentence in corpus] # 训练LDA模型 lda_model = models.ldamodel.LdaModel(corpus_bow, num_topics=3, id2word=dictionary) # 输出每个主题的关键词 for i, topic in enumerate(lda_model.show_topics(num_topics=3, num_words=5)): print('主题%d:%s' % (i+1, topic)) ``` 以上是用jieba分词进行文本挖掘的基本步骤和常见任务。需要注意的是,jieba分词只是文本挖掘的一部分,实际的文本挖掘任务涉及到多个领域的知识,需要综合运用自然语言处理、机器学习、统计学等方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值