中科院中文分词系统调研报告

上传人:m**** 文档编号:508524540 上传时间:2023-01-07 格式:DOCX 页数:12 大小:89.88KB
返回 下载 相关 举报
中科院中文分词系统调研报告_第1页
第1页 / 共12页
中科院中文分词系统调研报告_第2页
第2页 / 共12页
中科院中文分词系统调研报告_第3页
第3页 / 共12页
中科院中文分词系统调研报告_第4页
第4页 / 共12页
中科院中文分词系统调研报告_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《中科院中文分词系统调研报告》由会员分享,可在线阅读,更多相关《中科院中文分词系统调研报告(12页珍藏版)》请在金锄头文库上搜索。

1、自然语言处理调研报告(课程论文、课程设计)目:最大正向匹配中文分词系统作 者:陈炳宏 吕荣昌 靳蒲王聪祯孙长智所在学院:信息科学与工程学院专业年级:信息安全14-1指导教师:努尔布力职 称:副教授2016 年 10 月 29 日目录一、研究背景、目的及意义3二、研究内容和目标4三、算法实现5四、源代码71. seg.java 主函数72. dict.txt 程序调用的字典 103. 实验案例11五、小结12一、研究背景、目的及意义中文分词一直都是中文自然语言处理领域的基础研究。目前,网络上流行的 很多中文分词软件都可以在付出较少的代价的同时,具备较高的正确率。而且不 少中文分词软件支持 Luc

2、ene 扩展。但不过如何实现,目前而言的分词系统绝大 多数都是基于中文词典的匹配算法。在这里我想介绍一下中文分词的一个最基础算法:最大匹配算法 (Maximum Matching,以下简称MM算法)。MM算法有两种:一种正向最大匹配,一种逆 向最大匹配。二、研究内容和目标1、了解、熟悉中科院中文分词系统。2、设计程序实现正向最大匹配算法。3、利用正向最大匹配算法输入例句进行分词,输出分词后的结果。三、算法实现图一:算法实现正向最大匹配算法:从左到右将待分词文本中的几个连续字符与词表匹配, 如果匹配上,则切分出一个词。但这里有一个问题:要做到最大匹配,并不是第 一次匹配到就可以切分的 。算法示例

3、:待分词文本:con ten t = 中,华,民,族,从,此,站, 起, 来, 了, 。词 表:diet = 中华,中华民族,从此,站起来(1) 从eon ten t 1开始,当扫描到eon ten t2的时候,发现中华已经在 词表diet中了。但还不能切分出来,因为我们不知道后面的词语能不能组成 更长的词(最大匹配)。(2) 继续扫描 eontent3 ,发现“中华民”并不是 diet 中的词。但是我 们还不能确定是否前面找到的中华已经是最大的词了。因为“中华民”是 diet2的前缀。(3) 扫描 eontent4 ,发现“中华民族”是 diet 中的词。继续扫描下去:(4) 当扫描 eon

4、tent5 的时候,发现“中华民族从”并不是词表中的词, 也不是词的前缀。因此可以切分出前面最大的词中华民族。四、源代码1.seg.java 主函数package Segmentation;import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import java.io.*;import java.util.ArrayList;import java.util.List; import java.util.Scanner;import javax.swing.JButton;import javax.s

5、wing.JFrame; import javax.swing.JTextArea;import com.sun.istack.internal.localization.NullLocalizable;public class Seg extends JFramepublic List dictionary = new ArrayList(); public static String request;JFrame frame;JTextArea area1,area2; JButton button1,button2;public void newWindow() frame=new JF

6、rame();frame.setTitle(” 正向最大匹配); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null); frame.setResizable(false); frame.setBounds(300,200,500,400);Seg seg=new Seg(); area1=new JTextArea(); area1.setEditable(true); area1.setBounds(50,30,

7、400,110); frame.getContentPane().add(area1);area2=new JTextArea(); area2.setEditable(false); area2.setBounds(50,240,400,110); frame.getContentPane().add(area2);buttonl=new JButton(” 获取帮助); button1.setBounds(100,165,120,50); frame.getContentPane().add(buttonl); buttonl.addActionListener(new ActionLis

8、tener() Override public void actionPerformed(ActionEvent e) / TODO Auto-generated method stub area2.setText(在上方文本框中输入要分词的语句,点击分词即可 得到结果 n 如有任何问题,请联系软件的开发人员(虽然没有什么卵用) nVersion_5.6.2n););button2=new JButton( 分词 ); button2.setBounds(290,l65,l00,50); frame.getContentPane().add(button2); button2.addActio

9、nListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) / TODO Auto-generated method stub Seg s=new Seg(); s.setDictionary(); request=areal.getText()+ ; String responsel=s.leftMax(); area2.setText(responsel););public void setDictionary() File file=new File(.,dict.txt); Buff

10、eredReader reader = null; try reader = new BufferedReader(new FileReader(file); catch (FileNotFoundException e) / TODO Auto-generated catch block e.printStackTrace();String temp=null;try while(temp=reader.readLine()!=null) dictionary.add(temp); catch (IOException e) / TODO Auto-generated catch block

11、 e.printStackTrace();try reader.close(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace();finally if(reader!=null) try reader.close(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace();public String leftMax() String response = ;String s = ;for(int

12、 i=0; i 0) else response += (s + /);= ; 3return response;private boolean isIn(String s, List list) for(int i=0; ilist.size(); i+) if(s.equals(list.get(i) return true; return false;private int aheadCount(String s, List list) int count = 0;for(int i=0; ilist.size(); i+) if(s.length()=list.get(i).lengt

13、h() & (s.equals(list.get(i).substring(0, s.length() count +; return count;public static void main(String args) Seg seg = new Seg(); seg.newWindow();System.out.println(”请输入要分词的语句); Scanner scanner=new Scanner(System.in); request=scanner.nextLine()+ ;String response1 = seg.leftMax(); System.out.printl

14、n(response1); 2. dict.txt 程序调用的字典Ctrl+左击查看字典3.实验案例图二:案例五、小结无论是哪一种分词算法都不是完美的,都有各自的优缺点:基于词典的分词 算法的优点是简单,易于实现,缺点是匹配速度慢,不能很好的解决歧义问题, 并且也不能很好的解决未登录词的问题;基于统计的分词算法的优点是可以发现 所有的歧义切分,缺点是统计语言的精度和决策算法在很大程度上决定了解决歧 义的方法,并且速度较慢,需要一个长期的学习过程才能达到一定的程度;由于 汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形 式,因此目前基于理解的分词系统还处在试验阶段。通过这次学习实践,通过学习自然语言分词处理算法前向最大匹配算法, 并将之运用到本程序中。在编程中,对算法有了进一步了解,通过边学边动手, 提高了学以致用的能力,提高动手能力,在实验中更好的吸收学习的知识。感谢 努尔布力老师的指导和帮助。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号