导航:首页 > 网站优化 > seo中文分词算法

seo中文分词算法

发布时间:2020-11-11 00:31:22

1、Java中文分词算法

这两天正好在玩lucene,没用庖丁分词,主要是嫌它要配置环境,麻烦
下面是demo,记得要加lucene-core-2.3.2.jar和lucene-Analyzer.jar以及IKAnalyzer.jar这几个包,有问题call我

import java.io.Reader;
import java.io.StringReader;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.StopFilter;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenFilter;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.cn.ChineseAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.mira.lucene.analysis.IK_CAnalyzer;

public class TestJeAnalyzer {
private static String testString1 = "冗长的代码常常是复杂性的标志,会导致代码难以测试和维护.";
public static void testStandard(String testString) throws Exception{
Analyzer analyzer = new StandardAnalyzer();
Reader r = new StringReader(testString);
StopFilter sf = (StopFilter) analyzer.tokenStream("", r);
System.err.println("=====standard analyzer====");
System.err.println("分析方法:默认没有词只有字");
Token t;
while ((t = sf.next()) != null) {
System.out.println(t.termText());
}
}
public static void testCJK(String testString) throws Exception{
Analyzer analyzer = new CJKAnalyzer();
Reader r = new StringReader(testString);
StopFilter sf = (StopFilter) analyzer.tokenStream("", r);
System.err.println("=====cjk analyzer====");
System.err.println("分析方法:交叉双字分割");
Token t;
while ((t = sf.next()) != null) {
System.out.println(t.termText());
}
}
public static void testChiniese(String testString) throws Exception{
Analyzer analyzer = new ChineseAnalyzer();
Reader r = new StringReader(testString);
TokenFilter tf = (TokenFilter) analyzer.tokenStream("", r);
System.err.println("=====chinese analyzer====");
System.err.println("分析方法:基本等同StandardAnalyzer");
Token t;
while ((t = tf.next()) != null) {
System.out.println(t.termText());
}
}

public static void testJe(String testString) throws Exception{
// Analyzer analyzer = new MIK_CAnalyzer();
Analyzer analyzer = new IK_CAnalyzer();
Reader r = new StringReader(testString);
TokenStream ts = (TokenStream)analyzer.tokenStream("", r);
System.err.println("=====je analyzer====");
System.err.println("分析方法:字典分词,正反双向搜索,具体不明");
Token t;
while ((t = ts.next()) != null) {
System.out.println(t.termText());
}
}
public static void main(String[] args) throws Exception{
// String testString = testString1;
String testString = testString1;
System.out.println(testString);

testStandard(testString);
testCJK(testString);
// testPaoding(testString);

testChiniese(testString);
testJe(testString);
}

}

2、n-gram中文分词算法怎么算

主要看你的词表结构了,最大词长的初始值,查词典的次数和匹配的次数,然后得出时间复杂度,原始hash算法复杂度没记错的话应该是2.89,11年看过一个文献,提出一种改进的算法时间复杂度是2.291…… 另外,分词算法并不是原封不动的,比如有些搜索。

3、有哪些比较好的中文分词方案

中文分词算法大概分为两大类

a.第一类是基于字符串匹配,即扫描字符串,如果发现字符串的子串和词相同,就算匹配。
这类分词通常会加入一些启发式规则,比如“正向/反向最大匹配”, “长词优先” 等策略。

这类算法优点是速度块,都是O(n)时间复杂度,实现简单,效果尚可。

也有缺点,就是对歧义和未登录词处理不好。

b.第二类是基于统计以及机器学习的分词方式

这类分词基于人工标注的词性和统计特征,对中文进行建模,即根据观测到的数据(标注好的语料)对模型参数进行估计,即训练。 在分词阶段再通过模型计算各种分词出现的概率,将概率最大的分词结果作为最终结果。常见的序列标注模型有HMM和CRF。

这类分词算法能很好处理歧义和未登录词问题,效果比前一类效果好,但是需要大量的人工标注数据,以及较慢的分词速度。

4、百度算法中怎么进行中文切词分词?

导读:百度作为中文搜索引擎的先驱,它的核心地位可以说在短时期是没有任何搜索引擎可以超越的,百度的卓越成就在于它对博大精深的中国文化的领悟和对中文分词的的超强功底。百度受欢迎的主要原因除了用户习惯的原因,在较大程度上得益于百度算法的精准率,搜索结果值更贴近用户的想获得的资讯。用一句广告词 “正是我想要的”来形容百度最恰当不过了。

正因为百度对中国搜索引擎市场的统治地位,企业想在网上赚取大量的钞票,就不得不依靠百度。所以做搜索引擎的优化实际上就是百度优化。但百度强大的反优化能力和人工干预机制,使得众多的优化者以失败以失败告终。对于大多数优化者来说,百度成了洪水猛兽。果真如此吗?网络行销大师邓友成认为不尽然。只要是搜索引擎就离不开算法,任何算法都是有规律可循的。下面我们深入浅出的探讨一下百度的算法吧。

一. 搜索信息响应

当用户向百度提出搜索请求后百度会迅速根据用户的请求提供比较精准的结果值。

1. 比喻当用户提交“搜索引擎 优化 技术”这个查询文字串.百度会将文字串分割成若干子文字串,用空格,标点符等做细分处理。那么这个文字串就可以分成“搜索引擎,优化,技术”。

2. 如果用户提交的请求有重复的文字符,例如”优化 技术 优化”,百度会将重复的文字符看成一个。而字符的出现顺序就忽略。

3. 当用户提交请求中出现英文字符,百度一般会将英文字符当作一个整体来看,并和中文词分割开来,如果中文出现数字也是这样处理的。

百度通过切割、重组、归并、减负等手段对用户请求进行精准响应,使搜索结果符合用户的想法,以节省用户的查询时间,提高查询效率。

二. 中文核心分词

中文分词是百度算法的核心要素。按中文语法习惯,三个字(含三个字)以下的文字符是独立精准的词汇,没有重组的必要,所以百度对三个字(含三个字)以下的文字符不考虑细分。这也是百度核心算法的第一层,也是响应数量最多的部分。一般这些文字符更新的时间比较慢一些,一周或两周的时间。属于大更新的范畴。

四个字符的百度就会毫不客气的大卸十八块比如,网络工具这个文字串,当用户发出搜索请求后,会发现在搜索结果里面出现了红色的标记,已经把这个文字符分成了“网络,工具”。当然如果是四个字以上的文字串就更不用说了。会分成更多的分词。

三、字词匹配

大概了解了百度的分词原理后,我们要了解的一个重要方面就是字词的匹配问题。如果不知道字词的匹配,做优化就是空谈了。

最大匹配法

最大匹配法亦称MM法。假设自动分词词典(或词库)中的最长词条是y个字,则取被处理材料当前字符串序列中的前y个字作为匹配字段,查找词典,若词典中存在这样的一个y字词,则匹配成功,匹配字段被作为一个词切分出来;如果在词典中找不到这样一个y字词,则匹配失败,匹配字段去掉最后一个字,剩下的字段重新进行匹配,如此进行下去,直到匹配成功,也就是完成一轮匹配,切分出一个词为止。

正向最大匹配算法

正向最大匹配法(由左到右的方向)。首先粗分,按照句子把文本切成一个一个句子。然后把每个句子切成单字。字典按照树形结构存储,比如这句话“春天还会远吗”首先查找“春”字开头的词,然后按照字典树形结构往下走一个节点,查找“春”后面一个字是“天”的词,然后又下沉一个节点,找“还”下面是“会”的词,找不到了,查找就结束。

反向最大匹配算法

逆向最大匹配法(由右到左的方向);就是朝相反的方向发掘可以匹配的文字,比如网上商城这个文字串,那么会向左延伸在王上的前面会出现的结果是区域性的文字,不如上海或者北京等,在商城的前面会出现更精准的定义文字符,不如爱家,女人等专属性强的文字符。

双向最大匹配算法

正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。就是向左右纵深挖掘比较匹配的结果值。

熟悉了百度分词的方法后,我们就要在优化的过程充分的考虑相关联的因素,合理的对你所要向用户推荐的文字串做合理的规范和谋划。软优化欢迎优化者们和我们一道加强交流共同进步。

5、seo优化中网站标题与百度中文分词的关系

seo优化的细节过程中标题是非常重要的元素之一,在seo的交流与讨论中曾有人说过这样一句话,seo不就是改改标题加加友情链接嘛,当时还是一笑了之,如今想来这位朋友真说对了一句话,seo优化细节过程中,网站的标题还是非常重要的。那么百度中文分词与网站标题到底有什么关系呢?
1、搜索词与网站标题完全匹配
当用户在百度搜索的时候,搜索词如果和您的网站标题完全匹配,当您的网站达到一定的权重的时候就会有个好的排名,那么如果词不和您的网站标题完全匹配就进行分词,分词的方式参与了中文分词原理的综合方式。
2、搜索词不匹配才进行分词
当词语与您的网站标题不匹配的时候就会进行分词,分词的方式会参与,正向、逆向、统计、理解、以及新词和歧义词。

6、中文分词原理 百度如何分词 分词对seo的影响

分词是搜索引擎的一种技术,做seo可以合理利用搜索引擎的分词技术,避免关键词堆砌

7、如何在SEO中灵活运用百度中文分词技术

第一:字符串匹配的分词方法

(1)正向最大匹配法

就是把一个词从左至右来分词。

举个例子:”不知道你在说什么”

这句话采用正向最大匹配法是如何分的呢?“不知道,你,在,说什么”。

(2)反向最大匹配法

“不知道你在说什么”反向最大匹配法来分上面这段是如何分的。“不,知道,你在,说,什么”,这个就分的比较多了,反向最大匹配法就是从右至左。

(3)就是最短路径分词法。

就是说一段话里面要求切出的词数是最少的。

“不知道你在说什么”最短路径分词法就是指,把上面那句话分成的词要是最少的。“不知道,你在,说什么”,这就是最短路径分词法,分出来就只有3个词了。

(4)双向最大匹配法。

而有一种特殊的情况,就是关健词前后组合内容被认为粘性相差不大,而搜索结果中也同时包含这两组词的话,百度会进行正反向同时进行分词匹配。

第二:词义分词法

就是一种机器语音判断的分词方法。很简单,进行句法、语义分析,利用句法信息和语义信息来处理歧义现象来分词,这种分词方法,现在还不成熟,处在测试阶段

第三:统计分词法

根据词组的统计,就会发现两个相邻的字出现的频率最多,那么这个词就很重要。就可以作为用户提供字符串中的分隔符,这样来分词。

比如,“我的,你的,许多的,这里,这一,那里”等等,这些词出现的比较多,就从这些词里面分开来。

如果一天写10篇文章,一年就可以写3650篇文章,给你的网站写3650个关键词并合理布局到你网站中,可以使用关键词挖掘工具提词,根据用户需求进行关键词的筛选,吸引流量指日可待。分词还有一种好处,那就是提升内页的排名。SEO是心理学,去猜想用户使用什么词搜索,从而进行非常有意思的工作。

8、中文分词中正向最大匹配算法的分词速度是多少?准确率大概为多少?

主要看你的词表结构了,最大词长的初始值,查词典的次数和匹配的次数,然后得出时间复杂度,原始hash算法复杂度没记错的话应该是2.89,11年看过一个文献,提出一种改进的算法时间复杂度是2.291……

另外,分词算法并不是原封不动的,比如有些搜索引擎的词表结构就采用tire树结构,这样不用设置最大词长,不过内存空间方面就要有取舍,甚至还有采用减少查典次数增加匹配次数的搜索引擎……
所以单纯的给你一个189.3m/M纯内存分词速度,但是这算法换个台更高配置的服务器却变成了497.6ms/M,这没有任何意义……
记得哪个文献上有人说,分词本身不是目的,而是后续处理过程的必要阶段,所以,除非你是研究算法的,否则单纯追求这东西的速度和准确率没什么太大意义

9、搜索引擎常用的中文分词的方法有哪些

分词是指将一段句子切分成一个个单独的词项,对于英文来讲,单词作为词项,由于英文的书写格式,词与词之间必须有空格,这样搜索引擎很容易将一段句子处理成词项的集合;但是中文来讲,词之间没有空格,搜索引擎不能够直接将句子处理成词项的集合,需要一个分词过程,这里简单介绍搜索引擎中文分词的方法。

一、基于词典的分词方法

也叫“机械分词法”,将分词的句子与词典中的词语进行匹配,如果匹配成功,则将匹配的部分作为一个词,最后生成一个词语序列,根据分词的方向与优先长度不同可分为一下四种方法:

1、正向匹配法

根绝句子的正序(由左至右)进行匹配,例如:发展中国家,切分为:发展/中国/家。

2、逆向匹配法

根据句子的逆序(由右至左)进行匹配,例如:发展中国家,切分为:发展/中/国家。

3、最大匹配法

根据词典中最长的词语的长度确切分,如果不是,则在使用次一级长度去切分,假设字典中最长的词语是4个,以“发展中国家”为例,首先截取前四个“发展中国”判断,如果与字典中的词匹配,那么就是词项,如果不匹配,那就截取前三个词“发展中”来判断,以此类推直至切分出词项。

4、最小匹配法

同最大匹配法刚好相反。

二、基于理解分词的方法

为了解决分词中的歧义问题,搜索引擎完全模拟人理解句子的过程,对句子进行句法分析与语义分析,这个方法需要大量的语言知识和信息,计算过程比较复杂,对搜索引擎的基础硬件要求比较高。

三、基于统计分词的方法

随着时代与互联网的发展,会产生很多新的词汇,例如一些人名、新科技名词、新事件名(比如XX门、XX帝等),这些词汇未被词典收录,这些词成为“未登录词”,这些词汇的切分就要依靠统计分词的方法,搜索引擎通过统计这些字在整个语料库中出现的频率,例如在语料库中发现“S”、“E”、“O”同时出现的次数非常高,那么搜索引擎就判定”SEO”是一个词汇。

10、有哪些比较好的中文分词方案?

1.每次从一个完整的句子里,按照从左向右的顺序,识别出多种不同的3个词的组合;然专后根据下面的属4条消歧规则,确定最佳的备选词组合;选择备选词组合中的第1个词,作为1次迭代的分词结果;剩余的2个词继续进行下一轮的分词运算。采用这种办法的好处是,为传统的前向最大匹配算法加入了上下文信息,解决了其每次选词只考虑词本身,而忽视上下文相关词的问题。4条消歧规则包括,
1)备选词组合的长度之和最大。
2)备选词组合的平均词长最大;
3)备选词组合的词长变化最小;
4)备选词组合中,单字词的出现频率统计值最高。
CRF方法是目前公认的效果最好的分词算法。但,具体效果是否好,也依赖于你使用的训练模型。

与seo中文分词算法相关的知识