资源描述
XXXX大学信息工程与自动化学院学生实验报告
课程名称:搜索引擎技术基础
实验项目名称
分词
指导教师
教师评语
该同学是否了解实验原理: A.了解□ B.基本了解□ C.不了解□
该同学的实验能力: A.强 □ B.中等 □ C.差 □
该同学的实验是否达到要求: A.达到□ B.基本达到□ C.未达到□
实验报告是否规范: A.规范□ B.基本规范□ C.不规范□
实验过程是否详细记录: A.详细□ B.一般 □ C.没有 □
教师签名:
年 月 日
一、 上机目的和要求
1.掌握并实现正向最大匹配分词算法;
2.熟悉了解其他基于词典的分词方法.
二、实验原理
正向最大匹配算法:
(1)获得词典中长度最大的词语的长度(所含汉字的个数)L,句子的长度为K。句子已经分出去的字数k=0,要检查的词语长度n = L 。
(2)如果k = K ,退出。
(3)从左到右扫描要分词的句子,将从第k个字开始的n个字组成词语,判断是否出现在词典中。
(4)如果在词典中,则将这n个字分出去作为一个词,k = k + n,n = L,转(2)。
(5)如果不在词典中,则n=n-1
1)如果n=1,则将第k个字单独作为一个词分出去,k=k+1,n=L,转(2)。
2)否则,转(2)。
三、所用仪器、材料(设备名称、型号、规格等或使用软件)
PC机一台、MyEclipse
四、实验过程截图
五、实验记录
package com.lcc.demo;
import java.io.*;
import java.util.*;
public class DivideWord {
public String forward_maximum_matching_method(String sentence,int max) throws IOException{
List words=new ArrayList(); //用于存放词的集合
int i=0;
String word="";
int maxnum=max; //保存max的值
while(i<sentence.length()){
//截取max长度的词,若总长度不足,则截取剩余部分
if(i+max<=sentence.length()){
word=sentence.substring(i,i+max);
}else{
word=sentence.substring(i);
}
//如果截取的word是个词或者当前max值为1,则将word加入到词集合中
if(isWord(word)||max==1){
words.add(word);
i=i+max;
max=maxnum;
}else{
max--;
}
}
//将集合合成一个字符串返回
String result="";
for(int j=0;j<words.size();j++){
result+=words.get(j).toString()+"/ ";
}
return result;
}
//打开词典dictionary.txt,匹配word,判断word是否是一个词
public boolean isWord(String word) throws IOException{
boolean isword=false;
BufferedReader br=new BufferedReader(new FileReader("dictionary.txt"));
String text;
while((text=br.readLine())!=null){
String[]key=text.split(",");
if(word.equals(key[0])) {
isword=true;
}
}
br.close();
return isword;
}
public static void main(String[]args) throws IOException{
DivideWord dw=new DivideWord();
System.out.println(dw.forward_maximum_matching_method("随着科技兴农事业的发展,农村造就和培训了一批农业科技人员和专业人员,他们为农业持续稳定增长做出了应有的贡献。", 4));
}
}
六、总结
通过这次上机实验, 我不仅了解其他基于词典的分词方法,而且掌握并实现正向最大匹配分词算法,对搜索引擎中文分词的方法也有了一定的认识。
-3-
展开阅读全文