基于逆向最大化词表中文分词法。(转载)

2024-02-01 00:58

本文主要是介绍基于逆向最大化词表中文分词法。(转载),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

应用别人的东西

以前做知识管理系统的时候,由于需要建立全文检索和统计词频,需要对中文文本进行分词。对于中文分词,

国内做到好的应该是中科院自然研究所,但是相对比较复杂,我看了几次没有看明白. :)  ,由于平常我们的知识系统

对分词的要求没有这么高,所以 就选择了最大化的词表分词法.  词表选择的是人民日报97版的词表.

实际效果可以达到90%以上,基本可以满足需要。支持 Lucene.net分词,词表是启动时一次性载入;

   具体代码如下:

  public sealed class LtWordTokenizer : Tokenizer
 {
  private String bufferText;
  private ArrayList wordArray; 
  private int  intIndex=0;  
  public static Hashtable hsDic=new Hashtable();  

  public LtWordTokenizer(TextReader _in)
  {
   input = _in;
   bufferText=input.ReadToEnd().ToLower();   
   wordArray=new ArrayList();   
   wordSegment(bufferText);  
   
  }  

  public void wordSegment(String Sentence)
  {
   int senLen = Sentence.Length;
   int i=0, j=0;
   int M=12;
   string word;    
   while(i < senLen)
   {
    int N= i+M<senLen ? i+M : senLen+1;
    bool bFind=false;
    for(j=N-1; j>i; j--)
    {
     word = Sentence.Substring(i, j-i).Trim();     
     if(hsDic.ContainsKey(word.Trim()))
     {
      wordArray.Add(new Token(word,i,i+word.Length));      
      bFind=true;
      i=j;
      break;
     }     
    }
    if(!bFind)
    {
     word = Sentence.Substring(i, 1).Trim();
     i=j+1;
     if(word.Trim()!="")
     {
      wordArray.Add(new Token(word,i,i+word.Length));     
     }     
    }
   } 
  }


 
  public override Token Next()
  { 
   
   if(intIndex<wordArray.Count)
   { 
    intIndex++;
    return (Token)(wordArray[intIndex-1]);           
   }
   else
    return null;   
  }
  
 }
}

下次可以在分词的时候更改一下,不必先分好保存到arraylist,动态速度更好。

这篇关于基于逆向最大化词表中文分词法。(转载)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/665588

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode

Android逆向(反调,脱壳,过ssl证书脚本)

文章目录 总结 基础Android基础工具 定位关键代码页面activity定位数据包参数定位堆栈追踪 编写反调脱壳好用的脚本过ssl证书校验抓包反调的脚本打印堆栈bilibili反调的脚本 总结 暑假做了两个月的Android逆向,记录一下自己学到的东西。对于app渗透有了一些思路。 这两个月主要做的是代码分析,对于分析完后的持久化等没有学习。主要是如何反编译源码,如何找到

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

sqlite不支持中文排序,采用java排序

方式一 不支持含有重复字段进行排序 /*** sqlite不支持中文排序,改用java排序* 根据指定的对象属性字段,排序对象集合,顺序* @param list* @param field* @return*/public static List sortListByField(List<?> list,String field){List temp = new ArrayList(

提问的智慧(转载)

此文让我受益良多。值得一读,大家如果也觉得不错就一起来推~~~   ---------------------------------      在黑客世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度,同样取决于你提问的方法。本指南旨在帮助你提高发问技巧,以获取你最想要的答案。       首先你必须明白,黑客们只偏爱艰巨的任务,或者能激发他们

彻底解决win10系统Tomcat10控制台输出中文乱码

彻底解决Tomcat10控制台输出中文乱码 首先乱码问题的原因通俗的讲就是读的编码格式和写的解码格式不一致,比如最常见的两种中文编码UTF-8和GBK,UTF-8一个汉字占三个字节,GBK一个汉字占两个字节,所以当编码与解码格式不一致时,输出端当然无法识别这是啥,所以只能以乱码代替。 值得一提的是GBK不是国家标准编码,常用的国标有两,一个是GB2312,一个是GB18030 GB1

转:android ro.debuggable属性调试修改(mprop逆向)

android ro属性调试修改(mprop逆向)      大家都知道如果需要调试android 的程序,以下两个条件满足一个就行。第一是apk的配置文件内的AndroidManifest.xml的 android:debuggable=”true”,第二就是/default.prop中ro.debuggable=1。两种方式第一种通常是解包添加属性再打包,随着加壳软件以及apk校验等,容易出

matplotlib中文乱码问题

在使用Matplotlib进行数据可视化的过程中,经常会遇到中文乱码的问题。显示乱码是由于编码问题导致的,而matplotlib 默认使用ASCII 编码,但是当使用pyplot时,是支持unicode编码的,只是默认字体是英文字体,导致中文无法正常显示,所以显示中文乱码。 文本使用系统默认字体、手动指定字体、使用字体管理器来解决。 一、系统默认字体(全局设置字体) 在Matplotlib中

某里227逆向分析

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关。 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除! 前言 这次会简单的讲解阿里227版本滑块参数n的逆向分析流程以及简单的补环境,如果有疑问可以在评论区交流讨论,我看到会及时回复的,另外,有需要可联系我。 一