「java分词实例」java分词算法

博主:adminadmin 2022-11-24 21:37:07 47

今天给各位分享java分词实例的知识,其中也会对java分词算法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

用java读取文档并分词。

需要commons-io包, 或者自己写读文件的部分

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import org.apache.commons.io.FileUtils;

public class Test20 {

    /**

     * @param args

     */

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        String str = null;

        try {

            str = FileUtils.readFileToString(new File("e.txt"));

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        Pattern p = Pattern.compile("\\b[\\w-']+\\b");

        Matcher m = p.matcher(str);

        ListWord words = new ArrayListWord();

        while(m.find()){

            add(words, m.group().trim());

        }

        Collections.sort(words, new ComparatorWord(){

            @Override

            public int compare(Word o1, Word o2) {

                // TODO Auto-generated method stub

                return o1.getWord().compareTo(o2.getWord());

            }});

        System.out.println(words);

    }

    private static void add(ListWord words, String word) {

        // TODO Auto-generated method stub

        for(Word temp : words){

            if(temp.getWord().equals(word)){

                temp.setCount(temp.getCount() + 1);

                return;

            }

        }

        Word w = new Word();

        w.setWord(word);

        words.add(w);

    }

}

class Word{

    private String word;

    private int count = 1;

    public String getWord() {

        return word;

    }

    public void setWord(String word) {

        this.word = word;

    }

    public int getCount() {

        return count;

    }

    public void setCount(int count) {

        this.count = count;

    }

    @Override

    public String toString() {

        return "Word [word=" + word + ", count=" + count + "]";

    }

    

}

求高手给我用java编写一个英文单词分词器

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class Danci {

public static void main(String[] args){

String str = new String();

System.out.print("请输入一个英文句子:");

try{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//获取键盘输入

str = br.readLine();

}catch(IOException e){

e.printStackTrace();

}

String []s = str.split(" ");//转换成数组

System.out.println("你输入的句子共有单词 "+s.length+" 个");//s.length获取数组长度

}

}

//此程序只能获取一句话的单词个数.

java 怎么用lucenes进行分词

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.document.Document;

import org.apache.lucene.document.Field;

import org.apache.lucene.document.StringField;

import org.apache.lucene.document.TextField;

import org.apache.lucene.index.CorruptIndexException;

import org.apache.lucene.index.DirectoryReader;

import org.apache.lucene.index.IndexReader;

import org.apache.lucene.index.IndexWriter;

import org.apache.lucene.index.IndexWriterConfig;

import org.apache.lucene.index.IndexWriterConfig.OpenMode;

import org.apache.lucene.queryparser.classic.ParseException;

import org.apache.lucene.queryparser.classic.QueryParser;

import org.apache.lucene.search.IndexSearcher;

import org.apache.lucene.search.Query;

import org.apache.lucene.search.ScoreDoc;

import org.apache.lucene.search.TopDocs;

import org.apache.lucene.store.Directory;

import org.apache.lucene.store.LockObtainFailedException;

import org.apache.lucene.store.RAMDirectory;

import org.apache.lucene.util.Version;

import org.wltea.analyzer.lucene.IKAnalyzer;

/**

* 使用IKAnalyzer进行Lucene索引和查询的演示

* 2012-3-2

*

* 以下是结合Lucene4.0 API的写法

*

*/

public class LuceneIndexAndSearchDemo {

/**

* 模拟:

* 创建一个单条记录的索引,并对其进行搜索

* @param args

*/

public static void main(String[] args){

//Lucene Document的域名

String fieldName = "text";

//检索内容

String text = "IK Analyzer是一个结合词典分词和文法分词的中文分词开源工具包。它使用了全新的正向迭代最细粒度切分算法。";

//实例化IKAnalyzer分词器

Analyzer analyzer = new IKAnalyzer(true);

Directory directory = null;

IndexWriter iwriter = null;

IndexReader ireader = null;

IndexSearcher isearcher = null;

try {

//建立内存索引对象

directory = new RAMDirectory();

//配置IndexWriterConfig

IndexWriterConfig iwConfig = new IndexWriterConfig(Version.LUCENE_40 , analyzer);

iwConfig.setOpenMode(OpenMode.CREATE_OR_APPEND);

iwriter = new IndexWriter(directory , iwConfig);

//写入索引

Document doc = new Document();

doc.add(new StringField("ID", "10000", Field.Store.YES));

doc.add(new TextField(fieldName, text, Field.Store.YES));

iwriter.addDocument(doc);

iwriter.close();

//搜索过程**********************************

//实例化搜索器

ireader = DirectoryReader.open(directory);

isearcher = new IndexSearcher(ireader);

String keyword = "中文分词工具包";

//使用QueryParser查询分析器构造Query对象

QueryParser qp = new QueryParser(Version.LUCENE_40, fieldName, analyzer);

qp.setDefaultOperator(QueryParser.AND_OPERATOR);

Query query = qp.parse(keyword);

System.out.println("Query = " + query);

//搜索相似度最高的5条记录

TopDocs topDocs = isearcher.search(query , 5);

System.out.println("命中:" + topDocs.totalHits);

//输出结果

ScoreDoc[] scoreDocs = topDocs.scoreDocs;

for (int i = 0; i topDocs.totalHits; i++){

Document targetDoc = isearcher.doc(scoreDocs[i].doc);

System.out.println("内容:" + targetDoc.toString());

}

} catch (CorruptIndexException e) {

e.printStackTrace();

} catch (LockObtainFailedException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} catch (ParseException e) {

e.printStackTrace();

} finally{

if(ireader != null){

try {

ireader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if(directory != null){

try {

directory.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

java语言中文分词程序怎么编写分词程序正

现可以提供两种思路:

1.String或是StringBuffer(建议用) 中的indexOf("中华")方法,查找给定的的字符串中是否有给定词表中的词。

2.借鉴编译原理中的状态装换的思想。

先编写一个状态机,用于测试给定字符串中的词是否满足词表中的内容。

写在最后:1)建议使用第一种方法,因为在java 内部实现的查找操作其实 和你想得思路是相同的,不过他的效率会高些。

2)如果个人的编程能力比较强或是不考虑效率只是想实现专有的分词算法。可以使用第二种方法。

3)以上的两种方法都可以使用多线程来提高程序的效率。

java如何分词??

如果你的分词规则是在一个字符串的开头和结尾加上"_",然后两个字符一分的话,代码可以这样写:

import java.util.ArrayList;

import java.util.List;

public class Participle

{

private static final String HEAD_END_STR = "_";

private static final int PARTICIPLE_LENGTH = 2;

public static void main(String[] args)

{

String exampleWord = "计算机";

exampleWord = "_" + exampleWord + "_";

int length = exampleWord.length();

ListString result = new ArrayListString();

for (int i = 0; i length - 1; i++)

{

String str = exampleWord.substring(i, i + PARTICIPLE_LENGTH);

result.add(str);

}

System.out.println(result);

}

}

输出结果:_计, 计算, 算机, 机_

java分词实例的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java分词算法、java分词实例的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-24,除非注明,否则均为首码项目网原创文章,转载请注明出处。