日语分词组件sen的使用 -- 分词(一)
来源:互联网 发布:萧山网络问政 编辑:程序博客网 时间:2024/05/22 00:40
sen是日语的一种词典分词组建,准确性高。
1. 下载sen,下载的文件不含词典,需要用ant 重新构造。
http://www.mlab.im.dendai.ac.jp/~yamada/ir/MorphologicalAnalyzer/sen-1.2.2.1.zip
构造:
# cd /usr/local/sen# antBuildfile: build.xml...BUILD SUCCESSFULTotal time: X seconds# cd dic# antBuildfile: build.xml...BUILD SUCCESSFULTotal time: Y minute Z seconds#如果不想构造,我这边也保存现成的文件 http://yunpan.cn/QeUASmntdAjB8 (访问密码:b1a5)
2. 用sen词典进行分词,需要导包 http://yunpan.cn/QeUAbhPs35XwF (访问密码:8397)
public class SenAnalyzeTools {public SenAnalyzeTools() {// TODO Auto-generated constructor stub}private static StringTagger tagger;private static synchronized StringTagger getSingontenInstance() {if (tagger == null) {try {tagger = StringTagger.getInstance();} catch (Exception e) {e.printStackTrace();}} return tagger;}public static List<String> getAnalyzeWords(String words){System.setProperty("sen.home", "D:\\java\\JavaWorkSpace\\Shop\\WebRoot\\sen1.2"); // 词典的存放路径List<String> list = new ArrayList<String>();try {net.java.sen.Token[] tokens = getSingontenInstance().analyze(words);for (net.java.sen.Token token : tokens) {if (token.getPos() != null) {if (token.getPos().contains("名詞")) {list.add(token.getBasicString());}}System.out.println("getAddInfo=="+token.getAddInfo());System.out.println("getCform=="+token.getCform());System.out.println("getCost=="+token.getCost());System.out.println("getPos=="+token.getPos());System.out.println("getSurface=="+token.getSurface());System.out.println("getBasicString=="+token.getBasicString());}} catch (Exception e) {e.printStackTrace();}return list;}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString words = "Edifice EFR-50";System.out.println(SenAnalyzeTools.getAnalyzeWords(words));}}
3. sen词典和lucene进行整合,需要下载一个包 http://yunpan.cn/QeUApI9twWYr7 (访问密码:851a)
/** * 获得日文分词器 * */public static Analyzer getAnlyzer(){System.setProperty("sen.home", SEN_HOME); //词典的存放路径return new org.apache.lucene.analysis.ja.JapaneseAnalyzer();}
public static IndexWriter openIndexWriter(String indexPath) {System.setProperty("sen.home", SEN_HOME); // 索引的存放路径try { File indexDir = new File(indexPath); File file = new File(STR_INDEXDIR+"/segments"); IndexWriter writer = null; if(indexDir.exists()){if(indexDir.listFiles().length > 1){writer = new IndexWriter(indexDir,getAnlyzer(), false);if(writer != null){writer.setUseCompoundFile(true);} return writer;}else{writer = new IndexWriter(indexDir,getAnlyzer(),!file.exists());if(writer != null){writer.setUseCompoundFile(true);}return writer;}}else{ throw new Exception(indexDir+ " does not exist or is not a directory."); }} catch (Exception e) {e.printStackTrace();doLuceneException();}return null;}
4. sen词典也是可以自己构造的,可以做成自定义的词典。
词典制作
1:第一步:
首先需要找到准备做词典的词
寻找方法:
以前的做法是找到数据中的所有平假名和汉字在一起的名词词语,然后根据词频进行判断,最后找出所有词频大于某个数字的词语作为候选词语
2:生成csv文件
这个csv文件是生成sen词典的必须部分
Csv文件的格式大致如下
国務,2676,名詞,一般,*,*,*,*,国務,コクム,コクム
其中“国務”就是我们的需要做词典的词语,最后面的“コクム,コクム”这两部分我们不用理会,以*代替,最后的格式为:国務,2676,名詞,一般,*,*,*,*,国務,*,*
其中词性包括:
名詞-一般
名詞-固有名詞-一般
名詞-固有名詞-地域-一般
形容詞-自立
助詞-副詞化等等
我们做词典使用的词性是所有的名词
然后把我们找到的词制作成dic.csv文件,这是前提条件
3:使用ant命令生成sen词典
首先去要安装ant环境,和制作sen词典需要的环境变量
Ant下载地址:http://ant.apache.org/下载最新版本1.7
Sen环境需要下载lucene-ja.jar和lucene-core-2.3.2.jar,commons-logging.jar,sen.jar,commons-logging-api.jar,这些jar文件都可以在apache官方网找上找到
接下来在硬盘中建立一个文件夹,将其sen1.2这个文件夹拷贝到新建的文件夹下,sen1.2这个文件夹是sen词典自带的文件夹,可以在我们的项目中找到
把我们刚刚生成的dic.csv文件拷贝到sen1.2文件夹下,覆盖原先的dic.csv,最后一步就进入命令行执行ant命令,执行完毕后会生成4个后缀以sen结尾的文件,分别为da.sen,matrix.sen,posInfo.sen,token.sen,这4个文件就是我们生成后的字典。只需要这4个文件就好了
词典制作过程
利用标准的词典来制作我们网站需要的词典。
总体分为一下几步:
读出我们网站数据库中的数据。
对数据进行过滤,模式匹配,去掉无关字符。
用标准词典进行分词,进行词性判断,只留名词。
统计,去重。
在索引中查询,确定词典的用词。
搭建ANT Perl环境,生成词典。
查询优化词典,加入缺少的词。
重复第6,7步。
最后将生成的词典放入系统中进行应用。
以下是词典制作的详细步骤和例子:
读出我们网站数据库中的数据。
这一步主要是从数据库中读出我们抓取的原数据,可以先读在文件里面,也可以一边读一边进行第2步操作,根据机子的性能决定。
在lyfee词典的制作过程中,先将数据库中的原数据写到文件中去。运行Make_Dictionary工程中/Make_Dictionary/src/com/itmg/cyh/dao/FindLinkOne.java类。20万条数据写一个文件。
2.对数据进行过滤,模式匹配,去掉无关字符。
这一步是将读出来的文本进行匹配,过滤去掉文本中无关的字符(如:数字,字母各种特殊字符等。)
在lyfee中/Make_Dictionary/src/com/itmg/cyh/findLink/LinkPartern.java类进行文本的匹配,过滤等。
用标准词典进行分词,进行词性判断,只留名词。
这一步是将第二步得到的结果用标准词典进行分词,分词在四次以上的我们要,在这一步中就直接去掉,用词性进行判断,只留下名词,在名词中又分为表示地名的名词,然后写在不同的文件中。
在lyfee中/Make_Dictionary/src/com/itmg/cyh/findLink/DetailSearchBean.java类中的parseCommonPartern()方法进行此操作。然后直接运行类DetailSearchBean.java第2步和第3步同时进行。
统计,去重。
这一步是统计第三步得到的结果,判断词出现的频率,将出现频率在10次以上的词和10词一下的词写在不同的文件中。
在lyfee中,/Make_Dictionary/src/com/itmg/cyh/findLink/Account.java类中的countFilter()方法进行此项操作。
在索引中查询,确定词典的用词。
将第四步得到的结果一个一个的在索引中进行查询,将搜索结果在5条以上的词确定为词典用词,写在对应的文件中。
在lyfee中/Make_Dictionary/src/com/itmg/cyh/findLink/Account.java类中的accountByIndex()方法进行此项操作。
直接运行Account.java类,第四步和第五步一块执行。
6.搭建ANT Perl环境,生成词典。
配置ant和 perl环境,生成词典。
改了
<propertyname="commons-logging.jar"value="d:/sen/lib/commons-logging.jar"/>
<propertyname="commons-logging-api.jar"value="d:/sen/lib/commons-logging-api.jar"/>
<propertyname="sen.jar" value="d:/sen/lib/sen.jar"/>
在lyfee中/Make_Dictionary/src/com/itmg/cyh/tool/MakeDic.java类将词典用此写到对应的csv文件中,最后在命令行下 运行ant命令,编译生成词典。
差性能优化词典,加入缺少的词。
将生成的词典应用于系统中,查询,加入缺少的词,重复进行。最后得到系统可用的词典。
- 日语分词组件sen的使用 -- 分词(一)
- 日语分词组件mecab使用 -- 分词(二)
- 日语分词工具MeCab的安装和使用
- 海量的中文分词组件使用
- Python分词:结巴分词的安装使用
- 使用scws组件分词和phpanalysis分词类实现简单的php分词搜索
- python_jieba分词的使用
- jieba分词的使用
- “结巴”分词:做最好的Python分词组件
- “结巴”分词:做最好的Python分词组件
- “结巴”分词:做最好的Python分词组件
- 中文分词技术(一)
- NLP(一) Ansj 分词
- 数据库分词查询的优缺点以及英文和中文各自的分词方法(一)
- 分词
- 分词
- 分词
- 分词
- 黑马程序员_四 【数组操作】【数组的简单应用】
- Java 项目中异常积累(持续更新)
- 微软面试题:快速寻找满足条件的两个数
- Tomcat7.0配置教程(安装JDK和增加系统变量)
- mysql数据库的备份、导入、导出命令,以及数据的导入、导出
- 日语分词组件sen的使用 -- 分词(一)
- 技术地址
- 裘宗燕:C/C++ 语言中的表达式求值
- Maven-2:本地仓库与重置
- Flex实时加载Skin
- 高数思维导图
- Unity3D学习——(一)让Unity3D中的单位与2D像素对应
- Json字符串转换为JS对象方法
- 基于tomcat6.0的SSL实现