nlp学习2

1. 基本文本处理技能

1.1 分词的概念(分词的正向最大、逆向最大、双向最大匹配法)

参考:https://www.cnblogs.com/xuelisheng/p/9712973.html

1.2 词、字符频率统计;(可以使用Python中的collections.Counter模块)

字符频率统计:

 from collections import Counter
demo = '我爱自然语言处理。自然语言处理是一个很有意思的研究领域'
count = Counter(demo)
print(count)	

输出结果:Counter({‘言’: 2, ‘自’: 2, ‘然’: 2, ‘理’: 2, ‘语’: 2, ‘处’: 2, ‘的’: 1, ‘。’: 1, ‘研’: 1, ‘爱’: 1, ‘很’: 1, ‘领’: 1, ‘是’: 1, ‘究’: 1, ‘有’: 1, ‘意’: 1, ‘我’: 1, ‘个’: 1, ‘域’: 1, ‘思’: 1, ‘一’: 1})

词频统计相比字符统计而言,只是多了一步分词的过程,具体代码如下所示:

import jieba
from collections import Counter
with open(r'C:\Users\Administrator\Desktop\文章.txt', 'r') as f:
    xianni = f.read().strip()
xianni_words = [x for x in jieba.cut(xianni) if len(x) >= 2]  # 将全文分割,并将大于两个字的词语放入列表
c = Counter(xianni_words).most_common(10)  # 取最多的10组
print(c)

2.

2.1 语言模型中unigram、bigram、trigram的概念

unigram :一元分词,把句子分成一个一个的汉字
bigram: 二元分词,把句子从头到尾每两个字组成一个词语
trigram :三元分词,把句子从头到尾每三个字组成一个词语.

2.2 unigram、bigram频率统计;(可以使用Python中的collections.Counter模块,也可以自己寻找其他好用的库)

unigram等同于词频统计,而bigram频率统计只需要取n-gram,然后传入到Counter()中即可。

3.文本矩阵化:要求采用词袋模型且是词级别的矩阵化

3.1分词

一般采用jieba分词,代码如下:

import jieba
# 全模式
text = "我来到这里组队学习自然语言处理"
seg_list = jieba.cut(text, cut_all=True)
print(u"[全模式]: ", "/ ".join(seg_list))
# 精确模式
seg_list = jieba.cut(text, cut_all=False)
print(u"[精确模式]: ", "/ ".join(seg_list))
# 默认是精确模式
seg_list = jieba.cut(text)
print(u"[默认模式]: ", "/ ".join(seg_list))
# 搜索引擎模式
seg_list = jieba.cut_for_search(text)
print(u"[搜索引擎模式]: ", "/ ".join(seg_list))

输出结果:
[全模式]: 我/ 来到/ 这里/ 组队/ 学习/ 自然/ 自然语言/ 语言/ 处理
[精确模式]: 我/ 来到/ 这里/ 组队/ 学习/ 自然语言/ 处理
[默认模式]: 我/ 来到/ 这里/ 组队/ 学习/ 自然语言/ 处理
[搜索引擎模式]: 我/ 来到/ 这里/ 组队/ 学习/ 自然/ 语言/ 自然语言/ 处理

3.2 去除停用词

去除停用词典和错词检错都可以用词典的形式完成,以停用词为例,可使用的是知网提供的中文停用词典。
代码参照:https://blog.csdn.net/m0_38126215/article/details/83787873

import jieba
 
#导入自定义词典
jieba.load_userdict('C:\Users\Administrator\Desktop\mydict.txt')
# 去除停用词
stopwords = {}.fromkeys(['的', '包括', '等', '是'])
text = "故宫的著名景点包括乾清宫、太和殿和午门等。其中乾清宫非常精美,午门是紫禁城的正门。"
# 精确模式
segs = jieba.cut(text, cut_all=False)
final = ''
for seg in segs:
    if seg not in stopwords:
            final += seg
print (final)
seg_list = jieba.cut(final, cut_all=False)
print ("/ ".join(seg_list))

3.3 构造词表

def build_vocab(train_dir, vocab_dir, vocab_size=5000):
    """根据训练集构建词汇表,存储"""
    data_train, _ = read_file(train_dir)
 
    all_data = []
    for content in data_train:
        all_data.extend(content)
 
    counter = Counter(all_data)
    count_pairs = counter.most_common(vocab_size - 1)
    words, _ = list(zip(*count_pairs))
    # 添加一个 <PAD> 来将所有文本pad为同一长度
    words = ['<PAD>'] + list(words)
    open_file(vocab_dir, mode='w').write('\n'.join(words) + '\n')

3.4 文本向量化

参考:https://blog.csdn.net/QFire/article/details/81071010

from gensim.corpora import WikiCorpus
import jieba
from langconv import *
 
def my_function():
    space = ' '
    i = 0
    l = []
    zhwiki_name = './data/zhwiki-latest-pages-articles.xml.bz2'
    f = open('./data/reduce_zhiwiki.txt', 'w')
    wiki = WikiCorpus(zhwiki_name, lemmatize=False, dictionary={})
    for text in wiki.get_texts():
        for temp_sentence in text:
            temp_sentence = Converter('zh-hans').convert(temp_sentence)
            seg_list = list(jieba.cut(temp_sentence))
            for temp_term in seg_list:
                l.append(temp_term)
        f.write(space.join(l) + '\n')
        l = []
        i = i + 1
 
        if (i %200 == 0):
            print('Saved ' + str(i) + ' articles')
    f.close()
 
if __name__ == '__main__':
    my_function()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值