word 集成 lucene 分词问题

狂拽炫酷小灰灰 发布于 2017/01/04 17:32
阅读 113
收藏 0

@杨尚川 你好,想跟你请教个问题:

//如何在集成luncue6.3.0时,在构造索引的同时,就进行分词词频统计,另外如何保存文本读取每一行的分词结果 + 词频

//如下为我的代码:

FieldType ft=new FieldType();
ft.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS);
ft.setStored(true);//索引
ft.setStoreTermVectors(true);
ft.setTokenized(true);
ft.setStoreTermVectorPositions(true);//存储位置
ft.setStoreTermVectorOffsets(true);//存储偏移量

String content = "";

//读取文本文件 构建索引 省略部分代码

while((line = br.readLine())!=null){//使用readLine方法,一次读txt 一行
      content += line;
      Document document = new Document();
      document.add(new Field("content1", line, ft));
      indexWriter.addDocument(document);

      //对单独一行分词 

      //List words = WordSegmenter.seg(line);

      //PartOfSpeechTagging.process(words);

      // jdbc batch 保存 ?

}
indexWriter.commit();

/*   

WordFrequencyStatistics stat = new WordFrequencyStatistics();
stat.setRemoveStopWord(true);
stat.setSegmentationAlgorithm(SegmentationAlgorithm.MaxNgramScore);

//stat.seg(content) 返回是void 这只能如下读文件保存在文件里??我还要再write content到qin.txt

stat.seg(new File("E:/word/qin.txt"), new File("E:/word/qin_out.txt"));

stat.dump("E:/word/preFile");//dump 如何能不输出到文件 而转换为list 保存词频结果到数据库好繁琐啊

如果加上词性 还要再readLine,dump方法新生成的 preFile文件一遍

array = line.split(" ");

WordSegmenter.segWithStopWords(array[0]);

PartOfSpeechTagging.process(words);

words.get(0).getPartOfSpeech().getPos()

如上 这写的很繁琐 肯定不是这么写的...求告知正确简练的写法

求组装格式: 词语 + 词性 + 频率 --> List<String> (名称,n,5

*/

//如果按照上面写法 下面demo的 TokenStream 代码完全没用到 这里该怎么改 或者该怎么用
TokenStream tokenStream = analyzer.tokenStream("content1", content); //这里的第一个参数 和luncue索引的field 是否表示同一个 ??
tokenStream.reset();
while(tokenStream.incrementToken()){

       //()里面的没用啊 难道开始消费我写个空的while(tokenStream.incrementToken()){} ?? 只让消费完就行了?

       //词
       CharTermAttribute charTermAttribute = tokenStream.getAttribute(CharTermAttribute.class);
       //词在文本中的起始位置
       OffsetAttribute offsetAttribute = tokenStream.getAttribute(OffsetAttribute.class);
       //第几个词
       PositionIncrementAttribute positionIncrementAttribute = tokenStream.getAttribute(PositionIncrementAttribute.class);
       System.out.println((charTermAttribute.toString()+" ("+offsetAttribute.startOffset()+" - "+offsetAttribute.endOffset()+") "+positionIncrementAttribute.getPositionIncrement()));
}
//消费完毕
tokenStream.close();

PS:

    我希望能构造索引的时候就开始分词 并且加上词性分析,但使用过程中,代码不够简练,希望能告知正确写法




加载中
0
杨尚川
杨尚川
在和lucene集成的时候,是没有词频和词性的,不知道你为什么要这些信息呢?
返回顶部
顶部