`

海量的中文分词组件使用

阅读更多
海量的中文分词组件(HLSSplit.dll),是用C++写的.在java下调用,就要用JNI技术.

前段时间做了一个.希望和大家分享一下.关于JNI技术,网上有很多的介绍,还不太了解的朋友,可以去网上看看,很简单,看看就明白.

首先在写一个类,这个是在JAVA下的调用类.

public class fc ......{

 
  public fc()......{
      HLSplitInit();
  }
 
  public synchronized native byte[] seg(byte[] text);//分词
 
  public synchronized native void HLSplitInit();//初始化 
 
  public synchronized native void HLOpenUsrDict(byte[] fileName);//装载用户自定义词典
 
 
  public static void main(String[] args) ......{
      fc a=new fc();
     
      char c=0;
      String str="供应止回阀"+c;
           
      //String str = "潘岳与邱晓华指出,这次核算得出的结果虽不完整,但也足以对现实全貌有所估计。这些数字再次证明了,环境危机正在越来越严重地制约经济发展";
   
      String s=new String(a.seg(str.getBytes()));
     
      System.out.print(s);
  }

  static......{
      
    System.setProperty("java.library.path",System.getProperty("java.class.path"));
    System.loadLibrary("fc");
   
  }
}


其中的Main()函数里面的内容,是显示调用的方面,在实际的JNI中没有作用.

char c=0;
String str="供应止回阀"+c; 这样写的原因是C中字符串是有/0结束的.

执行JAVA fc.java ,然后执行JAVAH fc,产生fc.h头文件.

下面创建用VC6.0创建一个空DLL工程,

然后向工程中添加fc.h,jni.h,HLSegFunc.h,HLPubDef.h,HLSSplit.lib

添加一个.cpp文件,写入下面的代码



#include <windows.h>
#include "jni.h"
#include "fc.h"
#include<stdio.h>
#include "HLSegFunc.h"
#include <string.h>



JNIEXPORT void JNICALL Java_fc_HLSplitInit(JNIEnv *, jobject)
{                      
    HLSplitInit();
}

JNIEXPORT void JNICALL Java_fc_HLOpenUsrDict (JNIEnv *env, jobject b, jbyteArray c)
{

    jbyte * arrayBody = (env)->GetByteArrayElements(c,0);
    char * ptr = (char *)arrayBody;
    HLOpenUsrDict(ptr);
  
}



JNIEXPORT jbyteArray JNICALL Java_fc_seg (JNIEnv *env, jobject b, jbyteArray c)
{
        
    jbyte * arrayBody = (env)->GetByteArrayElements(c,0);
    char * ptr = (char *)arrayBody;
  
    HANDLE h=HLOpenSplit();
    HLSplitWord(h ,ptr,HL_CAL_OPT_SEARCH);
    int j=HLGetWordCnt(h);
    jbyteArray d=(env)->NewByteArray(strlen(ptr)+j);
    int k=0;
    char *sep=" ";
    for(int i=0;i<j;i++)
    {
        SHLSegWord* pWord=HLGetWordAt(h , i);
        env->SetByteArrayRegion(d,k,strlen(pWord->s_szWord),(jbyte *)pWord->s_szWord);
        k+=strlen(pWord->s_szWord);
        env->SetByteArrayRegion(d,k,1,(jbyte *)sep);
        k+=1;
    }
    HLCloseSplit(h);
    return d;


}
然后,编译就可以了.

把fc.class,fc.dll,HLSSplit.dll,HLSplitWord.dat,方面一个文件夹中,执行可以看到结果了.

我写这个,是要在Nutch,实现中文分词,不过,我试了试,感觉有这样的问题:因为它是基于上面文的分词,所以,不同的时候分词的结果不同,这样就给我们在搜索的时候造成了问题,比如"美白是永远的热门话题",这句话的分词结果是: 美/白/是/永远/的/热门/话题,而如果输入"美白"两个字,它就不分词了,这样就导致我们找不到上面的这句话了.产生这样的原因,我认为是词典里面没有"美白"这个词.所以当你把它用到搜索引擎的分词是,要注意这点.

网上有很多研究Nutch中加入中文分词技术文章,我觉得多少有些问题.过些天,我把我实现的过程,给大家分享一下,看看有没有什么问题.

分享到:
评论

相关推荐

    海量分词组件Com组件ForVB_php

    "海量分词组件"便是为解决这一问题而生,它利用高效的算法,能快速准确地对大量文本进行分词处理。 该组件提供了COM(Component Object Model)接口,这是一种二进制兼容的软件接口标准,允许不同编程语言之间的...

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

    总之,中文分词词典是中文自然语言处理的关键组件,而百度的分词词典以其高效和准确性在业界具有较高的影响力。通过对“baidu.txt”的研究,我们可以深入了解中文分词的原理,提升相关应用的性能,为中文信息处理...

    海量智能分词

    【海量智能分词】是一款专为处理大量文本数据而设计的智能分词工具,它在中文文本处理领域具有显著优势。在信息化时代,随着互联网、社交媒体、新闻报道等产生的大量文本数据,有效的分词技术成为了信息提取、文本...

    中文分词搜索,商城搜索分词

    2. pscws4.class.php:PSCWS(普什中文分词系统)是一个开源的PHP分词组件,它支持多模式分词,包括精确模式、全模式、简明模式和搜索引擎模式,适应不同场景的需求。 3. xdb_r.class.php:这部分可能是用于读取扩展...

    海量分词java版

    在中文环境中,由于汉字不包含明显的空格分隔,分词更具挑战性,需要使用特定的分词算法,如基于词典的匹配法、HMM( Hidden Markov Model)模型、CRF(Conditional Random Fields)等。 词性标注是分词后的下一步...

    VC++实现中文分词DLL

    在IT领域,中文分词是自然语言处理(NLP)中的关键步骤,它涉及到将连续的汉字序列分割成有意义的词语单元,这对于信息检索、文本分析、机器翻译等多个应用场景至关重要。VC++,全称为Microsoft Visual C++,是微软...

    elasticsearch ik 7.4.2 分词器

    IK分词器(Intelligent Chinese Analyzer for Elasticsearch)是专门为Elasticsearch设计的一款高性能中文分词组件。它支持多种分词模式,包括精确模式、全模式、最短路径模式、关键词模式等,能够满足不同场景下的...

    中文文本相似度匹配算法 simHash 海明距离 IK分词

    接下来是IK分词,全称为“Intelligent Chinese Analyzer”,是一个强大的开源中文分词组件。IK分词器支持多种分词模式,包括全模式、精确模式、最短路径模式等,能够有效地处理各种复杂语境下的中文文本。对于中文...

    solr安装包与ik中文分词器.zip

    Ik中文分词器则是为了解决中文文本处理中的分词问题,它是目前Java领域最活跃、最常用的中文分词组件之一。这个压缩包"solr安装包与ik中文分词器.zip"包含了这两个关键组件,旨在帮助用户快速搭建一个支持中文搜索的...

    IK分词器通过spark加载词典,并在spark中使用

    IK分词器是Java语言开发的开源中文分词组件,适用于各种Java应用,尤其是搜索引擎构建。而Spark则是一个分布式计算框架,常用于大数据处理。接下来,我们将深入探讨这两个工具的整合以及在Hadoop生态中的应用。 1. ...

    hadoop上的中文分词IKAnalyzer.zip

    强调了该工具在分布式计算框架Hadoop上的应用,这意味着IKAnalyzer被集成到了Hadoop MapReduce或Hadoop生态系统中的其他组件,如HBase、Spark等,用于对分布式环境中的海量中文文本进行分词。 标签 "IKAnalyzer" 是...

    庖丁分词jar包和dic目录

    MapReduce是一种分布式计算模型,由Google提出,常用于海量数据的并行处理,而中文分词作为数据预处理的步骤,对于后续的分析和挖掘至关重要。 标签“庖丁分词”进一步确认了我们关注的是这个特定的分词工具。庖丁...

    ansj分词ansj_seg-5.1.5.jar

    通过Scala,我们可以编写简洁的代码,实现对海量文本的分布式分词处理。 在实际使用中,"ansj分词jar包"中的文件应按照Java项目的依赖管理方式引入,如使用Maven或Gradle,将jar包添加至项目的依赖库,然后在代码中...

    IkAnalyzer分词器

    - **数据分析**:对海量中文文本数据进行预处理,为后续分析提供基础。 - **自然语言处理**:如情感分析、语义理解等,分词是基础步骤之一。 **5. 扩展与优化** 尽管IkAnalyzer已经相当成熟,但开发者可以根据具体...

    elasticsearch 7.13.2 ik pinyin 繁体 分词器 备份

    Pinyin分词器是Elasticsearch中的另一个重要组件,它将中文字符转换为拼音,使得用户可以通过拼音进行搜索。在7.13.2版本中,Pinyin分词器可能已优化了转换效率和拼音准确性,提高了基于拼音的搜索体验。这尤其对于...

    搭建Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词搜索引擎架构

    mmseg是中文分词搜索引擎的重要组件,用于对中文文本进行分词和索引。mmseg可以与Sphinx集成,提供高效的中文搜索功能。 五、总结 本资源提供了Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词搜索引擎架构的搭建过程,...

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-22.Lucene分词器3 共4页.pptx

    在这一部分中,提到了IKAnalyzer,这是一个专为中文分词设计的开源分词器。IKAnalyzer 2012是其一个版本,提供了完整的使用手册,包括如何配置和部署。用户需要将`IKAnalyzer2012.jar`放入项目的类路径中,同时配置`...

    Elasticsearch 7.6 logstash ik中文分词器下载.zip

    Elasticsearch 7.6 和 Logstash 是两个关键组件在大数据处理和搜索解决方案中,而 IK 分词器是针对中文文本处理的重要工具。这个压缩包文件提供了这些组件的最新版本,便于用户进行高效的中文文本分析和检索。 首先...

    solr6.0中IK分词需要的资料

    首先,IK分词器的JAR文件是核心组件,它实现了对中文文本的智能分析。这个JAR文件通常会被添加到Solr的类路径中,以便系统在启动时能够加载并使用。在Solr的`lib`目录下添加IK分词器的JAR文件,确保分词器与Solr的...

Global site tag (gtag.js) - Google Analytics