原文:http://yongsun.me/2013/06/simple-implementation-of-mmseg-with-python/
Since I heard of MMSEG Chinese word segmentation algorithm (http://technology.chtsai.org/mmseg/) many years ago, I finally implemented it with Python as a programing practice in my team, dictionary file and character frequencies from mmseg4j project.
#!/usr/bin/python # -*- encoding: UTF-8 -*- import codecs import sys from math import log from collections import defaultdict class Trie (object): class TrieNode: def __init__ (self): self.val = 0 self.trans = {} def __init__ (self): self.root = Trie.TrieNode() def __walk (self, trienode, ch): if ch in trienode.trans: trienode = trienode.trans[ch] return trienode, trienode.val else: return None, 0 def add (self, word, value=1): curr_node = self.root for ch in word: try: curr_node = curr_node.trans[ch] except: curr_node.trans[ch] = Trie.TrieNode() curr_node = curr_node.trans[ch] curr_node.val = value def match_all (self, word): ret = [] curr_node = self.root for ch in word: curr_node, val = self.__walk (curr_node, ch) if not curr_node: break if val: ret.append (val) return ret class Dict (Trie): def __init__(self, fname): super (Dict, self).__init__() self.load(fname) def load(self, fname): file = codecs.open(fname, 'r', 'utf-8') for line in file: word = line.strip() self.add(word, word) file.close() class CharFreqs (defaultdict): def __init__ (self, fname): super (CharFreqs, self).__init__(lambda:1) self.load(fname) def load (self, fname): file = codecs.open(fname, 'r', 'utf-8') for line in file: ch, freq = line.strip().split() self[ch] = freq file.close() class MMSeg: class Chunk: def __init__ (self, words, chrs): self.words = words self.lens = map(lambda x:len(x), words) self.length = sum(self.lens) self.mean = float(self.length) / len(words) self.var = sum(map(lambda x: (x-self.mean)**2, self.lens)) / len(self.words) self.degree = sum([log(float(chrs[x])) for x in words if len(x)==1]) def __str__ (self): return ' '.join(self.words).encode('UTF-8') + \ "(%f %f %f %f)" % (self.length, self.mean, self.var, self.degree) def __lt__ (self, other): return (self.length, self.mean, -self.var, self.degree) < \ (other.length, other.mean, -other.var, other.degree) def __init__(self, dic, chrs): self.dic = dic self.chrs = chrs def __get_chunks (self, s, depth=3): ret = [] def __get_chunks_it (s, num, segs): if (num == 0 or not s) and segs: ret.append(MMSeg.Chunk(segs, self.chrs)) else: m = self.dic.match_all(s) if not m: __get_chunks_it (s[1:], num-1, segs+[s[0]]) for w in m: __get_chunks_it (s[len(w):], num-1, segs+[w]) __get_chunks_it (s, depth, []) return ret def segment (self, s): while s: chunks = self.__get_chunks(s) best = max(chunks) yield best.words[0] s = s[len(best.words[0]):] if __name__ == "__main__": dic = Dict("dict.utf8") chrs = CharFreqs("chars.utf8") mmseg = MMSeg(dic, chrs) enc = sys.getfilesystemencoding() while True: try: s = raw_input ("Test String: ") except: break print "Test Result: ", for w in mmseg.segment(s.decode(enc)): print w.encode(enc), print '\n' # -*- indent-tabs-mode: nil -*- vim:et:ts=4
相关推荐
本文实例讲述了Python中文分词实现方法。分享给大家供大家参考,具体如下: 在Python这pymmseg-cpp 还是十分方便的! 环境 ubuntu10.04 , python2.65 步骤: 1 下载mmseg-cpp的源代码 ...
本教程将详细阐述如何在Tomcat服务器环境下搭建Solr搜索引擎,并结合mmseg4j分词器进行文本处理,以便实现更精确的中文搜索。以下是你需要了解的关键知识点: 1. **Tomcat服务器**:Tomcat是一个开源的、轻量级的...
为您提供Friso中文分词器下载,Friso 是使用 c 语言开发的一款开源的高性能中文分词器,使用流行的mmseg算法实现。完全基于模块化设计和实现,可以很方便的植入其他程序中, 例如:MySQL,PHP,并且提供了php5,php7...
- 这些分词工具多是基于Python实现的,Python因其丰富的自然语言处理库和简洁的语法,成为NLP领域的首选编程语言。用户可以利用这些工具和词库,结合Python的便利性,轻松实现中文文本的分词处理。 总结来说,这个...
考虑到这是一个从底层实现的项目,可能涉及的编程技术包括C++、Python或Java等,这些语言通常用于GIS开发。同时,还需要掌握GIS库的使用,如GDAL/OGR(用于处理栅格和矢量数据)和GEOS(用于几何操作)。 8. **...
与jieba类似,IK的词典同样不包含词性信息,需要结合其他工具或自定义实现来添加词性标注功能。 mmseg是基于最长匹配算法的中文分词工具,它通过查找最长的可匹配词来确定分词结果。mmseg的优点在于处理歧义的能力...
你可以选择适合你的编程语言,将CoreSeek集成到你的项目中,实现全文检索功能。 总结,安装和配置CoreSeek在CentOS 6.5上虽然涉及到多个步骤,但只要按照上述步骤操作,就能成功搭建一个高效、稳定的全文检索环境。...
Friso 是使用 c 语言开发的一款开源的高性能中文分词器,使用流行的mmseg算法实现。完全基于模块化设计和实现,可以很方便的植入其他程序中, 例如:MySQL,PHP,并且提供了php5,php7,ocaml,lua的插件实现。源码...
这个项目为研究人员和开发者提供了一个强大的框架,用于实现和训练各种分割模型。 该项目的核心可能基于PyTorch框架,因为它是深度学习领域常用的库,尤其在研究和实验中非常流行。CITATION.cff 文件通常包含项目...
同时HuhuSeg实现了一个简单但是非常高效的词图生成方式,由HanLP[3]的启发而来。同时核心词典直接使用了jieba[2]的词频词典。HuhuSeg implemented a simple but graceful words-gram generation enlightened by ...
CoreSeek的核心功能就是构建和管理这样的索引,以实现高效检索。 **3. 安装CoreSeek 4.1-Win32** 在解压“coreseek-4.1-win32.zip”后,你需要按照以下步骤进行安装: - 配置环境:确保系统已安装VC++运行库和必要...
6. **分布式搜索**:CoreSeek支持分布式部署,可以通过集群实现负载均衡和高可用性,满足大规模数据的检索需求。 7. **API接口**:CoreSeek提供了丰富的API接口,包括PHP、Python、Java等,方便开发者将搜索功能...
实现。 消息 核心代码的简单版本已发布。 它基于mmsegmentation。 您可以将代码集成到mmseg中以运行实验。 最近,我忙于求职和博士学位论文。 经过这段时间之后,我将发布完整版本。 我们在ADE20K val集上达到46.3...
5. **API接口**:CoreSeek提供了多种API接口,如PHP、Python、Java等,使得开发者可以方便地将其集成到自己的应用程序中,实现数据的检索和展示。 6. **实时更新**:CoreSeek支持实时或准实时的索引更新,这意味着...
2. **中文分词支持**:Coreseek特别针对中文环境进行了优化,内置了MMSEG分词算法,能有效地对中文文本进行分词处理,提高搜索的准确性和召回率。 3. **多数据源支持**:Coreseek能够连接多种数据库系统,如MySQL、...
1. **中文分词**:Coreseek采用了开源的MMSEG(MaxMatch Multiple Segmentation)算法,能够对中文文本进行精确的分词,提高搜索的准确性。 2. **全文检索**:它提供了快速的全文索引和查询功能,可以处理大量数据...
- **中文分词**:CoreSeek针对中文进行了优化,内置了成熟的中文分词引擎,如MMSEG(多模式中文分词算法),能够准确地进行词语划分,提高搜索的精确性。 - **全文索引**:通过建立高效的倒排索引,CoreSeek能够在...