首页 > 编程知识 正文

java统计单词个数,java基本类型有哪些

时间:2023-05-04 15:27:42 阅读:106971 作者:1968

最大匹配分词算法如何在Java项目中实现

发布时间: 2020-12-05 16:11:30

来源:亿速云

阅读: 67

作者: Leah

最大匹配分词算法如何在Java项目中实现? 针对这个问题,本文详细介绍了相应的分析和答案,希望能帮助很多想解决这个问题的伙伴找到更简单易行的方法。

全文检索有两个重要的过程。

1分词

2转置索引

我们先来看看分词算法

目前汉语分词有两个方向,其一是用利用概率的思想对文章进行分词。 也就是说如果两个字一起出现的频率很高,我们就可以假设这两个字是一个词。 这里,可以用m(a,b )=p ) AB )/p ) a ) p ) b )这样的公式来测量。 其中,a表示单词,b表示单词,p ) AB表示AB相邻出现的概率,p(a )表示这篇文章中a的频率,p ) b )表示这篇文章中b的频率。 使用概率分词的好处是不需要借助词典。 缺点是算法麻烦,效率低,还存在一定的错误率。

另一个方向是使用词典。 为程序准备词典,用该词典分写文章。 目前流行的方式包括前向最大匹配算法和反向最大匹配算法。 反向最大匹配算法的准确性更好。

以“我是坏人”为例,最大的词长是3,词典里包括我、是的、一、一、坏人、大坏人

顺方向的顺序是

我是一个人

我是的

我==得到语言

是一个

第一个

是的===得到语言

一个坏的

一个===得到一个词

坏人===得到语言

结果是,是的,一个人,坏人

反向运动学

坏人

坏人==坏人

是一个

一块==一块

我是的

是==是

我==我

结果是,是的,一个人,坏人

java代码如下所示

包数据;

import java.util.Arrays;

import java.util.HashSet;

import java.util.Set;

//*

*最大匹配分词算法

*

* @author JYC506

*

*/

公共类拆分字符串{

private Set set=new HashSet (;

private int positiveOver=0;

私有int reverse over=0;

//*

*正向最大匹配

*

* @param str词连写的句子

* @param num语的最大长度

* @return

*/

公共字符串[ ] positive split (stringstr,int maxSize )。

int tem=0;

int length=str.length (;

String[] ss=new String[length];

char[] cc=str.toCharArray (;

for(intI=0; i length; I ) {

positiveOver=0;

stringsb=this.tostr(cc,I,maxSize );

ss[tem ]=sb;

i=i positiveOver;

}

String[] ss2=new String[tem];

system.arraycopy(ss,0,ss2,0,tem );

return ss2;

}

//*

添加词典

*

* @param words

*/

publicvoidaddword (string [ ] words )

字符串: words (for ) {

this.set.add(ST;

}

}

//*

反向最大匹配

*

* @param str

* @param num

* @return

*/

公共字符串[ ] reverse split (stringstr,int num ) {

int tem=0

int length=str.length (;

String[] ss=new String[length];

char[] cc=str.toCharArray (;

for(intI=str.Length ) (- 1; i -1; I----) {

reverseOver=0;

stringsb=this.tostr2(cc,I,num );

tem;

ss[--length]=sb;

i=i - reverseOver;

}

String[] ss2=new String[tem];

system.arraycopy(ss,str.length )- tem,ss2,0,tem );

return ss2;

}

privatestringtostr(char[]cs,int start,int num ) {

int num2=num;

out:for(intj=0; j num; j ) {

StringBuffer sb=new StringBuffer (;

for(intI=0; i num2; I ) {

开始ics.length (if ) {

sb.append(cs[startI] );

} else {

num2----;

j----;

连续输出;

}

}

if(set.contains(sb.tostring () ) ) ) ) ) ) ) ) )。

positiveOver=num2 - 1;

return sb.toString (;

}

num2----;

}

returnstring.valueof(cs[start];

}

privatestringtostr2(char[]cs,int start,int num ) {

int num2=num;

for(intj=0; j num; j ) {

StringBuffer sb=new StringBuffer (;

for(intI=0; i num2; I ) {

int index=start - num2 i 1;

if (索引-1) {

sb.append(cs[index];

} else {

num2----;

}

}

if(set.contains(sb.tostring () ) ) ) ) ) ) ) ) )。

reverseOver=num2 - 1;

return sb.toString (;

}

num2----;

}

returnstring.valueof(cs[start];

}

publicstaticvoidmain (字符串[ ] args ) {

String[] words=new String[] { '我们','我们五个人','五人一组','一组' };

SplitString ss=new SplitString (;

/*向词典添加单词*

ss.addword(words;

String st='我们五人一组';

System.out.println (亿速云测试结果();

System.out.println ('分隔开的语句: ' st );

/*用两种方式分词。 其次,最大字长为4*/

string[]ss2=ss.reversesplit(ST,4 );

string [ ] ss1=ss.positive split (ST,4 );

System.out.println (前向最大匹配分词算法分词结果(Arrays.tostring(ss1 ) );

System.out.println (反向最大匹配分词算法分词结果(Arrays.tostring ) ss2 );

}

}

关于最大匹配分词算法如何在Java项目中实现问题的解答,在这里进行了共享。 希望以上内容对大家有帮助。 如果还有很多疑问没有解开的话,可以关注亿速云行业信息频道了解更多的知识。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。