- 5
- 0
- 约1.58万字
- 约 9页
- 2023-09-23 发布于湖北
- 举报
《⾃然语⾔处理》教学上机实验报告
《⾃然语⾔处理》教学上机实验报告
实验⼀
基于规则的分词算法
实验 ⽬的和要求:
握完全切分,正向最长匹配,逆向最长匹配,双向最长匹配,⽐较三种匹配效率。
实验过程 :
1.基于字典、词库匹配的分词⽅法(基于规则)。这种⽅法是将待分的句⼦与⼀个充分⼤的词典中的词语进⾏匹配。常⽤的有 :正向最⼤匹
配,逆向最⼤匹配,最少切分法。实际应⽤中,将机械分词作为初分⼿段,利⽤语⾔信息提⾼切分准确率。优先识别具有明显特征的词,以
这些词为断点,将原字符串分为较⼩字符串再机械匹配,以减少匹配错误率,或将分词与词类标注结合。
2.完全算法指的是,找出⼀段⽂本中的所有单词。这并不是标准意义上的分词,有些⼈将这个过程误称为分词,其实并不准确。
伪代码 :
def fully_segment(text, dic) :
word_ list = []
for i in range(len(text)) : # i从0遍历到text的最后⼀个字的下标
for j in range(i + , len(text) + ) : # j遍历[i + , len(text)]区间
word = text[i:j] # 取出连续区间[i, j)对应的字符串
if word in dic: # 如果在词典中,则认为是⼀个词
word_ list.append(word)
return word_ list
在正向最长匹配算法中,算法有可能分出不太令⼈满意的结果,此时,我们可以尝试逆向最长匹配算法。
3.逆向最长匹配算法和正向匹配⽅法类似,都是找出⼀段⽂本中的所有单词,有所不同的是,逆向最长匹配算法是从逆向来寻找词的。
伪代码 :
def backward_segment(text, dic) :
word_ list = []
i = len(text) -
while i = 0: # 扫描位置作为终点
longest_word = text[i] # 扫描位置的单字
for j in range(0, i) : # 遍历[0, i]区间作为待查询词语的起点
word = text[j : i + ] # 取出[j , i]区间作为待查询单词
if word in dic:
if len(word) len(longest_word) : # 越长优先级越⾼
longest_word = word
word_ list.insert(0, longest_word) # 逆向扫描,因此越先查出的单词在位置上越靠后
i -= len(longest_word)
return word_ list
4.⼈们经过尝试上述两种算法,发现有时正向匹配正确,有时逆向匹配正确,但似乎逆向匹配成功的次数更多。为此,⼈们继续提出新的规
则,⽐如所谓的双向最长匹配。
流程如下 :
(1)同时执⾏正向和逆向最长匹配,若两者的词数不同,则返回词数更少的那⼀个。
(2)否则,返回两者中单词更少的那⼀个。当词数也相同时,优先返回逆向最长匹配的结果。
伪代码 :
def count_single_char(word_ list : list) : # 统计单字成词的个数
return sum( for word in word_ list if len(word) == )
def bidirectional_segment(text, dic) :
f = forward_segment(text, dic)
b = backward_segment(text, dic)
if len(f) len(b) : # 词数更少
您可能关注的文档
最近下载
- 明代宗教信仰与思想控制.docx VIP
- 江苏省南通市2024-2025学年高二上学期期末学业质量监测语文试卷(含答案).pdf VIP
- 国就有成人演出的电影了?想看就要冒生命危险.pdf VIP
- 综合素质练习题及答案.doc VIP
- 2020-2021学年北京高三化学二轮复习 反应原理型简答题(突破二卷)(word版 含答案).docx VIP
- 电力拖动控制线路安装与检修(白银矿冶职业技术学院)知到智慧树答案.docx VIP
- 煤炭巷道掘砌工(高级工)资格考试题库(全真题库).docx VIP
- 影像叙事中情感共鸣生成机制.docx VIP
- 同轴二级圆柱齿轮减速器的设计(硬齿面).doc VIP
- 基于GPU多线程多通道图像高速重构方法、设备及介质.pdf VIP
原创力文档

文档评论(0)