V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
moonshile
V2EX  ›  分享创造

分享一个简单易懂、不需要语料库的分词程序~

  •  
  •   moonshile · 2015-07-16 19:16:17 +08:00 · 4549 次点击
    这是一个创建于 3426 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先上地址
    https://github.com/Moonshile/ChineseWordSegmentation

    原理参考的是这篇神文,通俗易懂,作者不愧是中文系出身的!

    好吧,我承认是想顺便求几个Star,真是还干净着呢。。


    觉得有必要贴一下使用方法,非常简单~

    from wordseg import WordSegment
    doc = u'十四是十四四十是四十,十四不是四十,四十不是十四'
    ws = WordSegment(doc, max_word_len=2, min_aggregation=1, min_entropy=0.5)
    ws.segSentence(doc)
    

    分词结果为

    十四 是 十四 四十 是 四十 , 十四 不是 四十 , 四十 不是 十四
    
    第 1 条附言  ·  2015-07-17 14:45:11 +08:00
    再注明一下,我纯粹是觉得这个算法简单好玩,特此分享学习的~
    不幸的是,这个分享确实可能对真正是需要分词的人造成误导(话说真需要的人肯定早就自己查到成熟的开源分词了吧),且总有傲慢而玻璃心的人喜欢抛出问题却不解决问题,这里特此解决一下,分享两个成熟的分词服务。

    1. Pullword: http://www.pullword.com/ (@dtdnqsb 推荐)

    2. 结巴分词: https://github.com/fxsjy/jieba
    18 条回复    2018-08-13 00:02:06 +08:00
    schezukNewTos
        1
    schezukNewTos  
       2015-07-16 19:39:05 +08:00
    善哉。
    不过『本课程』之类的词组怎么解决的?
    『是个』这样的搭配是怎么处理的?
    偶见词语在一句话中连续出现该怎样应对?
    moonshile
        2
    moonshile  
    OP
       2015-07-16 19:46:54 +08:00
    @schezukNewTos 这些都要看情况,具体来说是要看被分词的对象。
    如果被分词的是一篇介绍一门课程的文章,而“本课程”出现足够多次,那么“本课程”就视为一个词语;否则,如果只是一篇泛泛介绍各门课程的文章,那么就会分成“本”和“课程”两个词。
    具体了解的话可以看看我给的那篇参考文章,很好懂的~
    ChanneW
        3
    ChanneW  
       2015-07-16 20:00:35 +08:00
    星标后研
    zangbob
        4
    zangbob  
       2015-07-16 21:43:53 +08:00
    很长的段落或文章,怎么整?不能直接读取.txt吗?
    moonshile
        5
    moonshile  
    OP
       2015-07-16 22:27:35 +08:00
    @zangbob 可以先读到内存中,然后在调用……不过参数需要调整,我正在想办法让它能自适应较佳参数……
    X_Del
        6
    X_Del  
       2015-07-16 23:49:06 +08:00
    分词与机器学习结合,用待分词的文本提取出个语料库再分词……
    solsol
        7
    solsol  
       2015-07-17 00:17:09 +08:00
    M67几年前的旧文拿来骗星……现在的中文分词算法早就不一样啦
    Tiande
        8
    Tiande  
       2015-07-17 00:19:15 +08:00   ❤️ 1
    百度的 APIStore 提供的也有分词服务。
    moonshile
        9
    moonshile  
    OP
       2015-07-17 09:16:46 +08:00
    @X_Del 嗯,基本就是这么个思路……
    moonshile
        10
    moonshile  
    OP
       2015-07-17 09:19:56 +08:00
    @solsol 虽然你不需要,但是其他跟我一样刚刚看到的是需要的,收起你的傲慢吧
    saber000
        11
    saber000  
       2015-07-17 10:01:42 +08:00
    ws = WordSegment(doc, max_word_len=2, min_aggregation=1, min_entropy=0.5)
    ws.segSentence(doc)

    为什么doc要传两次?
    moonshile
        12
    moonshile  
    OP
       2015-07-17 10:21:54 +08:00
    @saber000 就如X_Del所说,先用待分词的文本提取出语料库,然后再分词;其实第二次也可以传其他文本,不过是用从第一个文本提取的语料库进行分词
    solsol
        13
    solsol  
       2015-07-17 13:24:27 +08:00
    @moonshile 请问我哪一个字傲慢了?被说算法旧就受挫了?学习旧的没什么,拿出来宣传就不好了吧,只能忽悠那些真正需要的人。我提醒别人一句有问题么?多说无益。
    lwbjing
        14
    lwbjing  
       2015-07-17 17:21:38 +08:00   ❤️ 3
    "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"
    Bryan0Z
        15
    Bryan0Z  
       2015-07-18 12:14:18 +08:00 via Android
    @lwbjing 你赢了
    Kabie
        16
    Kabie  
       2015-07-18 13:53:28 +08:00
    @solsol ...那么“现在的中文分词算法”又是怎么弄的呢。。。

    ……要提醒至少给个新算法的关键字吧。。。如果这都不屑于给。。。还不算傲慢吗。。。
    warden2h
        17
    warden2h  
       2015-07-23 16:28:00 +08:00
    @lwbjing 你赢了
    Rorysky
        18
    Rorysky  
       2018-08-13 00:02:06 +08:00
    @solsol #13 老哥,求指点下分词的新算法 关键词~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   880 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:04 · PVG 05:04 · LAX 13:04 · JFK 16:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.