分词小程序

Posted 守夜人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分词小程序相关的知识,希望对你有一定的参考价值。

 

根据给出的正则式,构建分词程序,完成相应的分词任务,并返回所有单词以及单词类别。

<关键字>-> int |for| while | do | return | break | continue

<运算符>->   + | - | * | / |==| < | <= |!= | > | >=

<界符>-> , | ; | ( | ) | {|}

<标识符>-> letter (letter | digit)*

<整型常数>-> digit digit*

<小数>-> digit digit* . digit digit*

 

程序说明(关键代码)

 

public void getFenCi() throws Exception {   

        BufferedReader br = new BufferedReader(new InputStreamReader(

                new FileInputStream(filePath)));

        //遍历每一行

        for (String line =br.readLine(); line != null; line = br.readLine()) {

          String[] s1 = line.trim().split(" ");//得到空格分开的字符串数组并且去掉首尾空格          

 for(int i=0;i<s1.length;i++){

 char[] CharArray= s1[i].toCharArray();

       for(char c : CharArray) {

      if(c >= ‘a‘ && c <= ‘z‘ || c >= ‘A‘ && c <= ‘Z‘) {//字母

                if (match_4 == 1) {//之前是运算符

                    matchEqual_4();//str设置为运算符

                }

                if (match_3 == 1) {//之前是整数

                    matchEqual_3();

                }

                str1 = str1 + c;

                match_1 = 1;

            } else if (match_4(c + "")) {//分隔符

                if(match_1 == 1){

                    matchEqual_1();

                }

                if (match_4 == 1) {

                    matchEqual_4();

                }

                if (match_3 == 1) {

                    matchEqual_3();

                }

                str1 = "";

                str1 = str1 + c;

                setValue("5", str1);

                str1 = "";

            } else if (match_2(c + "")) {//标识符

                if(match_1 == 1){

                    matchEqual_1();

                }

                if (match_3 == 1) {

                    matchEqual_3();

                }

                str1 = str1 + c;

                match_4 = 1;

            } else if (match_3(c + "")) {//数字匹配

                if(match_1==1){

                    matchEqual_1();

                }

                if (match_4 == 1) {

                    matchEqual_4();

                }

                str1 = str1 + c;

                match_3 = 1;

            }

}

    }

        }

        br.close();

}

 

思路总结

 

1程序主要利用str存储每一个分词,根据当前字符和前一个分词判断出是继续添加字符进分词,还是结束添加,并判断出分词类型,存储。最后通过map存储分词和类型。

2正则式只是实现一部分,但是小数都没有实现,离真正分词程序有很大不同。

3空格是默认的分隔符,每一行也应该是分隔的。因此用readline方法。并且通过line.trim().split(" ")得到空格分开的字符串数组并且去掉首尾空格。     

 

以上是关于分词小程序的主要内容,如果未能解决你的问题,请参考以下文章

隐马尔可夫实现中文分词小例子

C/C++小案例:汉语自动分词器

自然语言处理最终篇之许嵩音乐智能问答系统微信小程序

Python中文分词维特比算法为啥在输入字符超过一定长度后会发生错误

lucene3.0如何实现中英数字混合字符串分词,例"wo是一个19岁的小伙",分词为w,o,是,一,个,1,9,岁,的,小

深入浅出不可思议的中文分词技术