`
billgmh
  • 浏览: 65499 次
  • 性别: Icon_minigender_1
  • 来自: 广东广州
社区版块
存档分类
最新评论

原创中文分词代码分享(2.1)——基于词典的分词接口

阅读更多
现在来看一下基于词典的分词接口(最大匹配法)。先来看一下分词处理的接口SegmentProcessorImpl:
java 代码
  1. /* 
  2.  * @作者:Hades , 创建日期:2006-11-17 
  3.  * 
  4.  * 汕头大学03计算机本科 
  5.  *  
  6.  */  
  7. package edu.stu.cn.segment.matching.processor;  
  8.   
  9. import java.util.LinkedList;  
  10.   
  11. import edu.stu.cn.segment.matching.dictionary.DictionaryImpl;  
  12.   
  13. /** 
  14.  *  
  15.  * @author Hades Guan 中文分词接口 
  16.  */  
  17. public interface SegmentProcessorImpl  
  18. {  
  19.   
  20.     /** 
  21.      * 对srcFile文件进行分词,把结果保存为到tagFile文件中 
  22.      *  
  23.      * @param srcFile 
  24.      *            待分词的文本文件 
  25.      * @param tagFile 
  26.      *            分词结果保存目的文件 
  27.      */  
  28.     public void fileProcessor(String srcFile, String tagFile);  
  29.   
  30.     /** 
  31.      * @return 返回 dic。 
  32.      */  
  33.     public DictionaryImpl getDic();  
  34.   
  35.     /** 
  36.      * @param dic 
  37.      *            要设置的 dic。 
  38.      */  
  39.     public void setDic(DictionaryImpl dic);  
  40.   
  41.     /** 
  42.      * 对text文本进行分词,把结果保存为字符串链表 
  43.      *  
  44.      * @param text 
  45.      *            待分词的文本 
  46.      * @return 分词结果 
  47.      */  
  48.     public LinkedList<string> textProcess(String text);  </string>
  49.   
  50. }  
接口中定义了4个方法:设置词典setDic,获取词典getDic,对源文件分词后写入目标文件fileProcessor,对text字符串进行分词后返回结果链表textProcess。

接着是实现了SegmentProcessorImpl接口的抽象类MaxSegmentProcessor:
java 代码
  1. /* 
  2.  * @作者:Hades , 创建日期:2006-11-17 
  3.  * 
  4.  * 汕头大学03计算机本科 
  5.  *  
  6.  */  
  7. package edu.stu.cn.segment.matching.processor;  
  8.   
  9. import java.io.BufferedReader;  
  10. import java.io.BufferedWriter;  
  11. import java.io.FileNotFoundException;  
  12. import java.io.FileReader;  
  13. import java.io.FileWriter;  
  14. import java.io.IOException;  
  15. import java.io.PrintWriter;  
  16. import java.util.LinkedList;  
  17.   
  18. import edu.stu.cn.segment.matching.dictionary.DictionaryImpl;  
  19.   
  20. /** 
  21.  * @author Hades Guan 基于词典匹配的中文分词抽象类 
  22.  */  
  23. public abstract class MatchSegmentProcessor implements SegmentProcessorImpl  
  24. {  
  25.     /** 
  26.      * 词典操作类 
  27.      */  
  28.     protected DictionaryImpl dic = null;  
  29.   
  30.     /** 
  31.      * 分隔符字符串 
  32.      */  
  33.     protected String seperator = null;  
  34.   
  35.     /** 
  36.      * 英文数字字符集 
  37.      */  
  38.     protected final String CHAR_AND_NUM = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";  
  39.   
  40.     /** 
  41.      * 初始化分隔符的方法 
  42.      */  
  43.     protected void initSeperator()  
  44.     {  
  45.         // 初始化分隔符  
  46.         StringBuffer buffer = new StringBuffer();  
  47.         for (char c = '\u0000'; c <= '\u007F'; c++)  
  48.         {  
  49.             // 不过滤英文、数字字符  
  50.             if (this.CHAR_AND_NUM.indexOf(c) < 0)  
  51.                 buffer.append(c);  
  52.         }  
  53.         for (char c = '\uFF00'; c <= '\uFFEF'; c++)  
  54.             buffer.append(c);  
  55.         buffer.append("《》?,。、:“;‘’”『』【】-―—─=÷+§·~!◎#¥%…※×() ");  
  56.         this.seperator = buffer.toString();  
  57.     }  
  58.   
  59.     /** 
  60.      * 对srcFile文件进行分词,把结果保存为到tagFile文件中 
  61.      *  
  62.      * @param srcFile 
  63.      *            待分词的文本文件 
  64.      * @param tagFile 
  65.      *            分词结果保存目的文件 
  66.      */  
  67.     public void fileProcessor(String srcFile, String tagFile)  
  68.     {  
  69.         try  
  70.         {  
  71.             // 初始化输入输出  
  72.             BufferedReader in = new BufferedReader(new FileReader(srcFile));  
  73.             PrintWriter out = new PrintWriter(new BufferedWriter(  
  74.                     new FileWriter(tagFile)));  
  75.   
  76.             // 读入文件  
  77.             String line = null;  
  78.             StringBuffer buffer = new StringBuffer();  
  79.             while ((line = in.readLine()) != null)  
  80.             {  
  81.                 buffer.append(line);  
  82.             }  
  83.             // 关闭输入  
  84.             in.close();  
  85.   
  86.             // 分词处理  
  87.             LinkedList<string> result = this.textProcess(buffer.toString()  </string>
  88.                     .trim());  
  89.   
  90.             // 将结果写入文件  
  91.             for (String w : result)  
  92.                 out.println(w);  
  93.             // 关闭输出  
  94.             out.flush();  
  95.             out.close();  
  96.         }  
  97.         catch (FileNotFoundException e)  
  98.         {  
  99.             // TODO 自动生成 catch 块  
  100.             e.printStackTrace();  
  101.         }  
  102.         catch (IOException e)  
  103.         {  
  104.             // TODO 自动生成 catch 块  
  105.             e.printStackTrace();  
  106.         }  
  107.     }  
  108.   
  109.     /** 
  110.      * @return 返回 dic。 
  111.      */  
  112.     public DictionaryImpl getDic()  
  113.     {  
  114.         return dic;  
  115.     }  
  116.   
  117.     /** 
  118.      * @param dic 
  119.      *            要设置的 dic。 
  120.      */  
  121.     public void setDic(DictionaryImpl dic)  
  122.     {  
  123.         this.dic = dic;  
  124.     }  
  125.   
  126.     /** 
  127.      * 对text文本进行分词,把结果保存为字符串链表 
  128.      *  
  129.      * @param text 
  130.      *            待分词的文本 
  131.      * @return 分词结果 
  132.      */  
  133.     abstract public LinkedList<string> textProcess(String text);  </string>
  134. }  
抽象类中实现了具体实现类中相同的操作:设置词典setDic,获取词典getDic,初始化分隔字符(如:逗号,句号等)initSeperator,文件操作fileProcessor(先从源文件中读入内容构建成为字符串后,调用textProcess操作进行分词,最后将结果输出到目标文件中)。
分享到:
评论

相关推荐

    baidu.rar_ baidu_dictionary_中文分词_中文分词 词典_分词词典

    中文分词的方法主要有基于词典的分词、基于统计的分词和基于深度学习的分词。基于词典的分词方法主要依赖词典,通过查找最长匹配、最少切分等策略进行分词;基于统计的分词则利用大量语料库,通过概率模型来预测最佳...

    百度分词词典——常用词词典 自然语言处理分词专用

    百度分词词典——常用词词典 自然语言处理分词专用 能够辅助分词,共1876个词。

    一种中文分词词典新机制——双字哈希机制.pdf

    《一种中文分词词典新机制——双字哈希机制》这篇文章由李庆虎、陈玉健、孙家广撰写,发表于《中文信息学报》第17卷第4期,时间点为2003年。文章的核心贡献在于提出了一种针对中文分词优化的新词典机制——双字哈希...

    中文分词代码及词典(同博客代码)

    中文分词源代码,java语言。...代码通过读词典获取数据,进行中文分词。将词典读取的数据利用map去重,然后进行前缀扫面,详情见博客:https://blog.csdn.net/qq_40142391/article/details/82945556#commentsedit

    基于Python实现的词典分词方法或统计分词方法.zip

    实现基于词典的分词方法和统计分词方法:两类方法中各实现一种即可; 对分词结果进行词性标注,也可以在分词的同时进行词性标注; 对分词及词性标注结果进行评价,包括4个指标:正确率、召回率、F1值和效率。 ...

    HMM中文分词

    基于HMM的中文分词代码,虽然基于字标注的中文分词借鉴了词性标注的思想,但是在实践中,多数paper中的方法似乎局限于最大熵模型和条件随机场的应用,所以我常常疑惑字标注中文分词方法为什么不采用别的模型和方法呢...

    隐马尔科夫分词源代码

    隐马尔科夫模型(Hidden Markov Model,简称HMM)是统计建模方法中的一种,常用于自然语言处理中的序列标注任务,如中文分词。在这个任务中,HMM被用来识别和分割中文文本中的词语,以实现对文本的准确理解和分析。...

    中文分词代码

    中文分词是自然语言处理中的基础任务,它涉及到将连续的汉字序列切分成具有语义意义的词语单元,这一过程称为分词。在中文文本分析、信息检索、机器翻译等领域,中文分词起着至关重要的作用。本项目提供的“中文分词...

    matlab中文分词——最大正向匹配法.rar

    在IT领域,中文分词是自然语言处理(NLP)中的关键步骤,它涉及到将连续的汉字序列分割成有意义的词语单元,以便计算机能够理解和分析文本。本项目以"matlab中文分词——最大正向匹配法.rar"为主题,重点讨论了如何...

    中文分词java源代码

    《中文分词Java源代码深度解析》 在信息爆炸的时代,自然语言处理(NLP)技术扮演着至关重要的角色,而中文分词是NLP中的基础环节。本篇将深入探讨一个以Java编写的中文分词系统,通过对提供的源代码进行分析,揭示...

    C语言中文分词源代码

    在IT领域,中文分词是自然语言处理(NLP)中的关键步骤,它涉及到将连续的汉字序列分割成有意义的词汇单元,这对于信息检索、文本分析、机器翻译等多个应用至关重要。"C语言中文分词源代码"是一个专门用于实现这一...

    分词中文停止词词典

    例如,“分词中文停止词词典.txt”可能包含了诸如“的”、“了”、“和”等中文停止词,而“分词英文停止词词典.txt”则包含“the”、“is”、“and”等英文停止词。 使用这样的词典可以优化NLP任务的性能,尤其是...

    自然语言处理大作业Python实现基于词典的分词方法源代码+实验报告(高分项目)

    自然语言处理大作业Python实现基于词典的分词方法源代码+实验报告(高分项目)自然语言处理大作业Python实现基于词典的分词方法源代码+实验报告(高分项目)自然语言处理大作业Python实现基于词典的分词方法源代码+...

    盘古分词-开源中文分词组件词典-词典

    盘古分词是一款开源的中文分词组件,其主要任务是将连续的汉字序列切分成具有语义的词语,这是自然语言处理中的基础步骤。在中文文本处理中,由于汉字没有明显的空格来划分单词,因此分词显得尤为重要。分词的准确性...

    [易语言]基于词典的中文句子分词断句,带例程及词典

    总结来说,这个项目提供了一个基于易语言的中文分词断句解决方案,结合词典文件进行词汇划分,并通过源代码实现了基本的断句功能。通过扩展连接词处理和词性标注,可以提高系统在处理中文文本时的智能性和准确性,这...

    中文分词工具word-1.0,Java实现的中文分词组件多种基于词典的分词算法

    word分词是一个Java实现的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。 能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。 同时提供了Lucene...

    论文研究-基于LSTM网络的序列标注中文分词法.pdf

    当前主流的中文分词方法是基于字标注的传统机器学习方法,但传统机器学习方法需要人为地从中文文本中配置并提取特征,存在词库维度高且利用CPU训练模型时间长的缺点。针对以上问题进行了研究,提出基于LSTM(long ...

    中文分词处理技术源代码

    常见的分词方法包括基于词典的分词、统计分词、深度学习分词等。本项目可能采用了其中的一种或多种方法,结合词典和统计模型,以提高分词的准确性和效率。 `segmenter.class` 和 `segmenter.java` 文件很可能是分词...

    分词代码---绝对可以直接运行

    从压缩包中的文件名“fenci”来看,这可能是指“分词”(fenci是中文“分词”的拼音),可能是代码文件、数据文件或者结果文件。通常,分词代码会包括读取文本、预处理(如去除标点符号和停用词)、进行分词操作、后...

Global site tag (gtag.js) - Google Analytics