正向_逆向匹配分词

# 1、统计分词词典,确定词典中最长词条的字符m;# 2、从左向右取待切分语句的m个字符作为匹配字段,查找词典,如果匹配成功,则作为一个切分后的词语,#    否则,去掉待匹配字符的最后一个继续查找词典,重复上述步骤直到切分出所有词语。

dictA = [‘南京市‘, ‘南京市长‘, ‘长江大桥‘,  ‘大桥‘]

maxDictA = max([len(word) for word in dictA])

sentence = "南京市长江大桥"

def cutA(sentence):    result = []    sentenceLen = len(sentence)    n = 0

while n < sentenceLen:        matched = 0

for i in range(maxDictA, 0, -1):

piece = sentence[n:n+i]

if piece in dictA:                result.append(piece)                matched = 1                n = n + i                break        if not matched:

result.append(sentence[n])            n += 1

print(result)

cutA(sentence)  # [‘南京市长‘, ‘江‘, ‘大桥‘]

dictB = [‘南京市‘, ‘南京市长‘, ‘长江大桥‘,  ‘大桥‘]

maxDictB = max([len(word) for word in dictA])

sentence = "南京市长江大桥"def cutB(sentence):    result = []    sentenceLen = len(sentence)

while sentenceLen > 0:        word = ‘‘        for i in range(maxDictB, 0, -1):            piece = sentence[sentenceLen-i:sentenceLen]            if piece in dictB:                word = piece                result.append(word)                sentenceLen -= i                break

if word is ‘‘:            sentenceLen -= 1            result.append(sentence[sentenceLen])

print(result[::-1])

cutB(sentence)  # [‘南京市‘, ‘长江大桥‘]

# 双向最大匹配法# 思想: 将正向最大匹配和逆向匹配得到的分词结果进行比较,按照最大匹配原则,选择切分总词数最少的作为最终分词结果。

原文地址:https://www.cnblogs.com/hapyygril/p/9916351.html

时间: 2024-11-09 06:13:12

正向_逆向匹配分词的相关文章

。一个最大逆向匹配分词算法的例子

原文链接地址:http://www.52nlp.cn/maximum-matching-method-of-chinese-word-segmentation/ 逆向匹配法思想与正向一样,只是从右向左切分,这里举一个例子: 输入例句:S1=”计算语言学课程有意思” : 定义:最大词长MaxLen = 5:S2= ” “:分隔符 = “/”: 假设存在词表:…,计算语言学,课程,意思,…: 最大逆向匹配分词算法过程如下: (1)S2=””:S1不为空,从S1右边取出候选子串W=”课程有意思”: (

自然语言处理 最大逆向匹配分词算法

输入例句:S1="计算语言学课程有意思" : 定义:最大词长MaxLen = 5:S2= " ":分隔符 = “/”: 假设存在词表:…,计算语言学,课程,意思,…: 最大逆向匹配分词算法过程如下: (1)S2="":S1不为空,从S1右边取出候选子串W="课程有意思": (2)查词表,W不在词表中,将W最左边一个字去掉,得到W="程有意思": (3)查词表,W不在词表中,将W最左边一个字去掉,得到W=&q

深度解析中文分词器算法(最大正向/逆向匹配)

中文分词算法概述: 1:非基于词典的分词(人工智能领域) 相当于人工智能领域计算.一般用于机器学习,特定领域等方法,这种在特定领域的分词可以让计算机在现有的规则模型中, 推理如何分词.在某个领域(垂直领域)分词精度较高.但是实现比较复杂. 例:比较流行的语义网:基于本体的语义检索. 大致实现:用protege工具构建一个本体(在哲学中也叫概念,在80年代开始被人工智能),通过jena的推理机制和实现方法. 实现对Ontology的语义检索. Ontology语义检索这块自己和一朋友也还在琢磨,目

最大正向匹配分词MM

RT,NLP第一次实验,96人民日报语料分词+unigram和bigram词频统计. 一开始写了个RMM,用了各种序列排序,然后分词的算法用了简单的前缀暴力匹配,果然跑语料的时间根本无法估计.. 果断重写..又找了一个blog,发现MM算法 一开始是想得太复杂了,导致循环太多,后来修改成简单版本的即可正常时间运行. python代码: # -*- coding: cp936 -*- import sys import os #词库矩阵,相同长度词的被放同一个列表中 def matrix(max_

C++泛型指针的正向与逆向循环读取的改进方法

#include "stdafx.h"#include <algorithm>#include <functional>#include <vector>#include <iterator> using namespace std;int _tmain(int argc, _TCHAR* argv[]){    //双向访问的例子    char st[11] = "abcdefghij";    vector<

C++泛型指针的正向与逆向循环读取时报错Expreeeion:vector iterator + offset out of range问题

首先看图 代码: // test.cpp : 定义控制台应用程序的入口点.//C++程序设计//2015-5-4 //STL strandard template libeary #include "stdafx.h"#include <iostream>#include <algorithm>#include <functional>#include <vector>#include <iterator>using name

堆栈_括号匹配

class Solution { public: bool isValid(string s) { if(s.empty()) return false; stack<int> s1; int n=s.size(); for(int i=0;i<n;i++) { if(s[i]=='('||s[i]=='['||s[i]=='{') s1.push(s[i]); else if(s1.empty()) return false; else if((s[i]==')'&&s

Prefab和GameObject的正向和逆向查找

我发现很多美工兄弟都爱问程序unity3d为什么总丢材质? 我不排除U3d有BUG的情况下会丢材质?但是其实很多时候是人为操作而引起的. 1.不保存就在上传这个操作太恐怖了,切记!!在 U3D里面你无论操作了什么,当你要上传svn的时候一定要先保存场景,Ctrl+S 切记切记!!如果不保存就上传很有可能就会丢材质. 2.我的电脑明明没事,怎么你哪里就丢材质?我发现一个很有意思的现象,每次走到美术电脑前看它的svn工程时,我都会发现各种的“黄叹号”整个工程严重的冲突.然后程序和美术的对话就是:“这

逆向最大匹配分词算法C#

逆向顺序 句子:大家好我叫XX我是一名程序员 程序员 -> 序员 -> 员 名程序 -> 程序 -> 序 一名程 -> 名程 -> 程 是一名 -> 一名 -> 名 我是一 -> 是一 -> 一 X我是 -> 我是 -> 是 XX我  -> X我 -> 我 叫XX  -> XX -> X 我叫X -> 叫X -> X 好我叫 -> 我叫 -> 叫 家好我 -> 好我 -> 我