博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FST的简单应用
阅读量:5754 次
发布时间:2019-06-18

本文共 2372 字,大约阅读时间需要 7 分钟。

package fst;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.StringReader;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.lucene.analysis.TokenStream;import org.apache.lucene.analysis.core.WhitespaceTokenizer;import org.apache.lucene.analysis.synonym.SynonymFilterFactory;import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;import org.apache.lucene.analysis.util.FilesystemResourceLoader;import org.apache.lucene.store.DataInput;import org.apache.lucene.store.InputStreamDataInput;import org.apache.lucene.util.BytesRef;import org.apache.lucene.util.CharsRef;import org.apache.lucene.util.IntsRef;import org.apache.lucene.util.NumericUtils;import org.apache.lucene.util.Version;import org.apache.lucene.util.fst.Builder;import org.apache.lucene.util.fst.ByteSequenceOutputs;import org.apache.lucene.util.fst.FST;import org.apache.lucene.util.fst.Util;class FSTDic{	 FST
 fst ;  FST.BytesReader fstReader; public FSTDic() throws IOException{ File file=new File("fst"); if(file.exists()){ fst=load(file); }else{ List
 words=new ArrayList
(); words.add("中国"); words.add("中国人"); words.add("中国人民"); words.add("中国人民解放军"); fst=build(words); } fstReader = fst.getBytesReader(); } public void save() throws IOException{ fst.save(new File("fst")); } public FST load(File file) throws IOException{ return new FST(new InputStreamDataInput(new FileInputStream("fst")),ByteSequenceOutputs.getSingleton() ); } private  FST
 build(List
 words) throws IOException{  ByteSequenceOutputs outputs = ByteSequenceOutputs.getSingleton();  Builder
 builder = new Builder
(FST.INPUT_TYPE.BYTE4, outputs);  final IntsRef scratchIntsRef = new IntsRef();  BytesRef output = new BytesRef(4);  for(String word: words){  NumericUtils.intToPrefixCodedBytes(word.length(), 0, output);  builder.add(Util.toUTF32(word, scratchIntsRef), BytesRef.deepCopyOf(output));  }  return builder.finish(); } public boolean contains(String word) throws IOException{  FST.Arc
 scratchArc = new FST.Arc
();  int bufUpto=0,buflen=word.length();  BytesRef pendingOutput=fst.outputs.getNoOutput();  BytesRef matchOutput = null;  fst.getFirstArc(scratchArc);  while(bufUpto

(随记,稍后补全……)

转载地址:http://lmdkx.baihongyu.com/

你可能感兴趣的文章
mac安装kubernetes并运行echoserver
查看>>
多页架构的前后端分离方案(webpack+express)
查看>>
算法(第4版) Chapter 1
查看>>
前端技术选型的遗憾和经验教训
查看>>
“亲切照料”下的领域驱动设计
查看>>
SRE工程师到底是做什么的?
查看>>
解读:Red Hat为什么收购Ansible
查看>>
Ossim下的安全合规管理
查看>>
DelphiWebMVC框架下BPL热部署实现
查看>>
C++与MySQL的冲突
查看>>
siki学习之观察者模式笔记
查看>>
spring.net 继承
查看>>
ES6:模块简单解释
查看>>
JavaScript indexOf() 方法
查看>>
ZJU PAT 1023
查看>>
WMI远程访问问题解决方法
查看>>
Android开发历程_15(AppWidget的使用)
查看>>
阿花宝宝 Java 笔记 之 初识java
查看>>
Linux下的C编程实战
查看>>
[32期] html中部分代码与英语单词关系
查看>>