这种两种方法都是机械分词方法,它是按照一定的策略将待分析的汉字串与一个”充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。
按照扫描方向的不同,串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用的几种机械分词方法如下:
1)正向最大匹配法(由左到右的方向);
2)逆向最大匹配法(由右到左的方向);
3)最少切分(使每一句中切出的词数最小)。
还可以将上述各种方法相互组合,例如,可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。由于汉语单字成词的特点,正向最小匹配和逆向最小匹配一般很少使用。一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。统计结果表明,单纯使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配的错误率为1/245。但这种精度还远远不能满足实际的需要。实际使用的分词系统,都是把机械分词作为一种初分手段,还需通过利用各种其它的语言信息来进一步提高切分的准确率。
一种方法是改进扫描方式,称为特征扫描或标志切分,优先在待分析字符串中识别和切分出一些带有明显特征的词,以这些词作为断点,可将原字符串分为较小的串再来进机械分词,从而减少匹配的错误率。另一种方法是将分词和词类标注结合起来,利用丰富的词
类信息对分词决策提供帮助,并且在标注过程中又反过来对分词结果进行检验、调整,从而极大地提高切分的准确率
定义比较抽象,举个例子来说明正向最大匹配和反向最大匹配。
例子:’今天来了许多新同事’
1.正向最大匹配方式,最大长度为5
今天来了许
今天来了
今天来
今天 ====》 得到一个词–今天
来了许多新
来了许多
来了许
来了
来 ====》 得到一个词–来
了许多新同
了许多新
了许多
了许
了 ====》 得到一个词–了
许多新同事
许多新同
许多新
许多 ====》得到一个词– 许多
新同事
新同
新 ====》得到一个词– 新
同事 ====》得到一个词– 同事
最后正向最大匹配的结果是:
/今天/来/了/许多/新/同事/
2.反向最大匹配方式,最大长度为5
许多新同事
多新同事
新同事
同事 ====》得到一个词– 同事
来了许多新
了许多新
许多新
多新
新 ====》得到一个词– 新
天来了许多
来了许多
了许多
许多 ====》得到一个词– 许多
今天来了
天来了
来了
了 ====》得到一个词– 了
今天来
天来
来 ====》得到一个词– 来
今天 ====》得到一个词– 今天
最后反向最大匹配的结果是:
/今天/来/了/许多/新/同事/
正向最大匹配和反向最大匹配的结果并不一定相同
例子:’我一个人吃饭’
1.正向最大匹配方式,最大长度为5
我一个人吃
我一个人
我一个
我一
我 ====》得到一个词– 我
一个人吃饭
一个人吃
一个人
一个 ====》得到一个词– 一个
人吃饭
人吃
人 ====》得到一个词– 人
吃饭 ====》得到一个词– 吃饭
最后正向最大匹配的结果是:
/我/一个/人/吃饭/
2.反向最大匹配方式,最大长度为5
一个人吃饭
个人吃饭
人吃饭
吃饭 ====》得到一个词– 吃饭
我一个人
一个人
个人 ====》得到一个词– 个人
我一
一 ====》得到一个词– 一
我 ====》得到一个词– 我
最后反向最大匹配的结果是:
/我/一/个人/吃饭/
这次两种方式的结果就不一致了。更多SEO知识请百度搜牛到家SEO
逆向搜索计算机科学术语
科普中国 | 本词条由“科普中国”科学百科词条编写与应用工作项目审核
审阅专家 姚远
逆向搜索就是从目标状态出发进行的搜索,通常是与正向搜索同时进行(双向搜索),如果正向搜索时新扩展的状态是逆向搜索中出现过的,将两段搜索路径连接起来就是找到了一个解(通常是一种搜索步数最少的解)。如果反向搜索时新扩展的状态是正向搜索中出现过的,则与上述一样,也是一种最优解。逆向搜索既是一种技术,又是一种思维,广泛应用于计算机软件、互联网技术、电信技术、工业通用技术及贸易经济等领域。
中文名
逆向搜索
外文名
backward search
相对
正向搜索
学科
计算机技术
本质
逆向思维
人工智能举例互联网应用举例铁路运输举例网络贸易举例计算机软件举例TA说参考资料
人工智能举例
在人工智能中,双向产生式系统是一种同时应用正向和逆向搜索方式的产生式系统。在该系统中,把状态描述和目标描述合并为一数据库,其中状态描述应用F规则,目标描述应用B规则。[1]比如,智能机器人为了制定行动规划,具有自动求解问题的能力,它可用一套特殊的产生式规则在状态空间中搜索求解。为了得到操作序列,可以从当前的状态集出发,进行正向搜索,也可以从目标状态集出发进行逆向搜索,也可根据目标状态和当前状态的差选择合适的操作(手段-目的分析法)等。[2]
互联网应用举例
搜索引擎优化(SEO)的主要工作是通过了解各类搜索引擎如何抓取互联网页面、如何进行索引以及如何确定其对某一特定关键词的搜索结果排名等技术,来对SEO网页进行相关的优化,更改自己的网站,向排列在搜索结果前列的网站学习网站的组织方式和网页的编写方式,使其提高搜索引擎排名,从而提高网站访问量,最终提升网站的销售能力或宣传能力的技术,达到SEO目的。这个揣摩搜索引擎的过程是种逆向搜索的过程。
铁路运输举例
逆向进路搜索算法是铁路运输系统中的一种重要算法。这种算法利用站场图和二叉树的相似性,通过站场信息建立二叉树模型,但该算法搜索二叉树的过程与传统的二叉树搜索算法的搜索方向相反,它是由目标孩子向根节点搜索,这种逆向搜索不需要进行遍历搜索,就可以快速有效地完成所有进路的搜索。即在站场图中完成任意一对车站按钮之间的基本进路和变更进路的搜索。为了满足一些特殊的要求(解决车次跟踪的问题),该搜索也能完成任意一对车站设备之间的基本进路和变更进路的搜索。
网络贸易举例
网络目标市场逆向搜索模型的建立思路是首先从分析一个具体产品的原理、功能和用途入手,并考虑它的主要技术规范、价格等其他因素,确定此商品的样本特征由以上对产品样本特征的分析,推测出有效市场制定出一套搜索步骤,检索出需要此产品的商务网站,从而找到需此产品的企业、公司等顾客。
计算机软件举例
逆向搜索系统,用于从输入的子字串中检验来自给定列表的一个或几个字的存在的一种系统。字的列表存储在一存储器阵列,其对于存储一个子字的每一存储器单元包括一个比较器。串被分子串。每一子串被加载几次到比较寄存器,每次滚动移动一个子字。在每一存储器单元,同时与输入子串进行比较。对于每一存储器单元一个逻辑电路检测串的子字与列表字的子字的相继匹配。只要对于列表的完整字出现匹配,则对这一字设置一信号。设置一列表匹配信号,优先权编码器可用来输出匹配字之一的地址(位置)。[3]一、爬山法简介
爬山法(climbing method)是一种优化算法,其一般从一个随机的解开始,然后逐步找到一个最优解(局部最优)。 假定所求问题有多个参数,我们在通过爬山法逐步获得最优解的过程中可以依次分别将某个参数的值增加或者减少一个单位。例如某个问题的解需要使用3个整数类型的参数x1、x2、x3,开始时将这三个参数设值为(2,2,-2),将x1增加/减少1,得到两个解(1,2,-2), (3, 2,-2);将x2增加/减少1,得到两个解(2,3, -2),(2,1, -2);将x3增加/减少1,得到两个解(2,2,-1),(2,2,-3),这样就得到了一个解集:
(2,2,-2), (1, 2,-2), (3, 2,-2), (2,3,-2), (2,1,-2), (2,2,-1), (2,2,-3)
从上面的解集中找到最优解,然后将这个最优解依据上面的方法再构造一个解集,再求最优解,就这样,直到前一次的最优解和后一次的最优解相同才结束“爬山”。
二、Python实例
设方程 y = x1+x2-x3,x1是区间[-2, 5]中的整数,x2是区间[2, 6]中的整数,x3是区间[-5, 2]中的整数。使用爬山法,找到使得y取值最小的解。
代码如下:
import random
def evaluate(x1, x2, x3):
return x1+x2-x3
if__name__== '__main__':
x_range = [ [-2, 5], [2, 6], [-5, 2] ]
best_sol = [random.randint(x_range[0][0], x_range[0][1]),
random.randint(x_range[1][0], x_range[1][1]),
random.randint(x_range[2][0], x_range[2][1])]
while True:
best_evaluate = evaluate(best_sol[0], best_sol[1], best_sol[2])
current_best_value = best_evaluate
sols = [best_sol]
for i in xrange(len(best_sol)):
if best_sol[i] >x_range[i][0]:
sols.append(best_sol[0:i] + [best_sol[i]-1] + best_sol[i+1:])
if best_sol[i] <x_range[i][1]:
sols.append(best_sol[0:i] + [best_sol[i]+1] + best_sol[i+1:])
print sols
for s in sols:
el = evaluate(s[0], s[1], s[2])
if el <best_evaluate:
best_sol = s
best_evaluate = el
if best_evaluate == current_best_value:
break
print 'best sol:', current_best_value, best_sol
某次运行结果如下:
[[0, 5, 1], [-1, 5, 1], [1, 5, 1], [0, 4, 1], [0, 6, 1], [0, 5, 0], [0, 5, 2]]
[[-1, 5, 1], [-2, 5, 1], [0, 5, 1], [-1, 4, 1], [-1, 6, 1], [-1, 5, 0], [-1, 5, 2]]
[[-2, 5, 1], [-1, 5, 1], [-2, 4, 1], [-2, 6, 1], [-2, 5, 0], [-2, 5, 2]]
[[-2, 4, 1], [-1, 4, 1], [-2, 3, 1], [-2, 5, 1], [-2, 4, 0], [-2, 4, 2]]
[[-2, 3, 1], [-1, 3, 1], [-2, 2, 1], [-2, 4, 1], [-2, 3, 0], [-2, 3, 2]]
[[-2, 2, 1], [-1, 2, 1], [-2, 3, 1], [-2, 2, 0], [-2, 2, 2]]
[[-2, 2, 2], [-1, 2, 2], [-2, 3, 2], [-2, 2, 1]]
best sol: -2 [-2, 2, 2]
可以看到,最优解是-2,对应的x1、x2、x3分别取值-2、2、2。
三、如何找到全局最优
爬山法获取的最优解的可能是局部最优,如果要获得更好的解,多次使用爬山算法(需要从不同的初始解开始爬山),从多个局部最优解中找出最优解,而这个最优解也有可能是全局最优解。
另外,模拟退火算法也是一个试图找到全局最优解的算法。
Python实现的Kmeans++算法实例
1、从Kmeans说起Kmeans是一个非常基础的聚类算法,使用了迭代的思想,关于其原理这里不说了。下面说一下如何在matlab中使用kmeans算法。创建7个二维的
Python中的map、reduce和filter浅析
1、先看看什么是iterable对象以内置的max函数为例子,查看其doc:printmax.__doc__max(iterable[,key=func])-valuemax(a,b,c,...[,key=func])-valueWithasingleiterableargument,returnitsla
Python中的Numpy入门教程
1、Numpy是什么很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)