V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
howlanderson
V2EX  ›  自然语言处理

MicroTokenizer: 一个面向教学的微型中文分词引擎

  •  
  •   howlanderson · 2018-06-15 14:10:06 +08:00 · 9697 次点击
    这是一个创建于 2382 天前的主题,其中的信息可能已经有所发展或是发生改变。

    微型中文分词器

    一个微型的中文分词器,能够按照词语的频率(概率)来利用构建 DAG (有向无环图)来分词。

    特点 / 特色

    • 微型:主要代码只有一个文件,不足 200 行
    • 面向教育:可以导出 graphml 格式的图结构文件,辅助学习者理解算法过程
    • 良好的分词性能:由于使用类似 结巴分词 的算法,具有良好的分词性能
    • 具有良好的扩展性:使用和 结巴分词 一样的字典文件,可以轻松添加自定义字典

    演示

    在线演示

    在线的 Jupyter Notebook 在 Binder

    离线演示

    分词

    代码:

    import MicroTokenizer
    
    tokens = MicroTokenizer.cut("知识就是力量")
    print(tokens)
    

    输出:

    ['知识', '就是', '力量']
    

    有向无环图效果演示

    DAG of 'knowledge is power'

    备注

    • <s></s> 是图的起始和结束节点,不是实际要分词的文本
    • 图中 Edge 上标注的是 log(下一个节点的概率的倒数)
    • 最短路径已经用 深绿色 作了标记

    更多演示

    "王小明在北京的清华大学读书"

    DAG of xiaomin

    项目地址

    https://github.com/howl-anderson/MicroTokenizer

    开发者

    Xiaoquan Kong @ https://github.com/howl-anderson

    依赖

    只在 python 3.5+ 环境测试过,其他环境不做兼容性保障。

    安装

    pip install git+https://github.com/howl-anderson/MicroTokenizer.git
    

    如何使用

    分词

    见上文

    导出 GraphML 文件

    from MicroTokenizer.MicroTokenizer import MicroTokenizer
    
    micro_tokenizer = MicroTokenizer()
    micro_tokenizer.build_graph("知识就是力量")
    micro_tokenizer.write_graphml("output.graphml")
    
    11 条回复    2018-08-30 16:25:37 +08:00
    leopku
        1
    leopku  
       2018-06-15 16:17:10 +08:00
    先 star 为敬
    howlanderson
        2
    howlanderson  
    OP
       2018-06-15 17:43:59 +08:00
    @leopku 感谢 PKU 大佬!
    artandlol
        3
    artandlol  
       2018-06-15 17:54:40 +08:00 via iPhone
    Ik
    smartcn 这类的吗
    shiny
        4
    shiny  
       2018-06-15 18:13:27 +08:00
    让我想起“ 24 口交换机”那梗,试了下,带数字就直接报错了。
    howlanderson
        5
    howlanderson  
    OP
       2018-06-18 11:04:29 +08:00
    @shiny 我没有尝试这种混合的用法,不过我回去看看什么情况,改进一下,谢谢试用!
    howlanderson
        6
    howlanderson  
    OP
       2018-06-18 11:06:20 +08:00
    @artandlol 类似的功能,但目的不同,这个主要是面向教学:演示一个简单的分词器如何工作的。
    howlanderson
        7
    howlanderson  
    OP
       2018-06-18 11:07:42 +08:00
    @shiny 不知道你是否在 README 中注意到,你可以直接使用 binder: https://mybinder.org/v2/gh/howl-anderson/MicroTokenizer/master?filepath=.notebooks%2FMicroTokenizer.ipynb 来做实验。
    howlanderson
        8
    howlanderson  
    OP
       2018-06-19 13:22:09 +08:00
    @shiny 我添加了 https://github.com/howl-anderson/MicroTokenizer/issues/1 这个 issue 来跟踪这个问题。
    northisland
        9
    northisland  
       2018-06-20 15:40:20 +08:00
    厉害,已 star
    howlanderson
        10
    howlanderson  
    OP
       2018-06-21 20:26:09 +08:00
    @northisland 感谢!
    shm7
        11
    shm7  
       2018-08-30 16:25:37 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2887 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:36 · PVG 20:36 · LAX 04:36 · JFK 07:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.