中文信息处理之正向最大匹配法(上)

一、工具

语言:python3.5
语料:人民日报语料

二、任务分词

1. 抽取词表,统计词频

给的素材如图 1 所示:
图1
观察上边的格式,可以得到:所抽取的文本信息(包括标点)都是在两个空格和 / 之间,所以正则表达式如下:

# text 是文本信息
import re
pattern = re.compile(r'  (.*?)/')
fenci = re.findall(pattern,text)

但在 fenci 中会出现 “[北京”这样的情况,这是在处理有些词汇的时候,使用嵌套结构,保留了两种结果。

以“北京石景山发电总厂”为例,语料为 “[北京/ns 石景山/ns 发电/vn 总厂/n]nt”,即:北京、石景山、发电、总厂各自是一个词,总体也是一个词。

鉴于此,我将所抽取的词汇分为两种:

  1. 可以直接通过上述正则直接抽取的,即颗粒度小的
  2. 一个整体的名词

针对上述两种情况,对于第一种词汇,首先将文本中的 [] 去掉,然后通过上边的正则表达式抽取;对于第二种词汇,通过 [.*?] 抽取,然后将词汇合为一个整体词汇。

这两个词表合起来就达到了抽取词表的效果。

import re 

pattern1 = re.compile(r'  (.*?)/')
pattern3 = re.compile(r'\[(.*?)]')
pattern4 = re.compile(r'[a-z\[\]\s\/]*')

# 除去文本中 [] 符号,方便抽取颗粒比较细的中文词汇
text1 = re.sub(r'[\[\]]*','',text)
# fenci_list  小颗粒词汇
# buchongci 大颗粒词汇
fenci_list = re.findall(pattern1,text1)
buchongci = re.findall(pattern3,text)

# 提取 [] 中的文本
buResult = []
for i in buchongci:
	temp = re.sub(pattern4,'',i)
	buResult.append(temp)
# 合并两个 list
Fenci_list = buResult + fenci_list

接着开始统计词频,由于 Fenci_list 比较大,所以使用 Counter 比较方便。代码如下:

from collections import Counter

data = dict(Counter(Fenci_list))
data2 = sorted(data.items(),key = lambda e:e[1],
				reverse = False)
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿德罗斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值