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

[开源] 我是如何使用自然语言处理背单词的。

  •  
  •   senghoo · 86 天前 · 3813 次点击
    这是一个创建于 86 天前的主题,其中的信息可能已经有所发展或是发生改变。

    说起英语,特别是背单词,对于我来说一直是个头疼的问题。尝试了 N 次,失败了 N 次。

    前几个月迫于需要看英文文献,再次感觉到被英语拖累的感觉。便决定第 N+1 次尝试背单词。

    个人对背单词的一些要求为:

    1. 背单词不能只针对独立的单词,需要放到语境中学习。
    2. 单词需要自己完整的拼写出来,不能是只进行选择题。
    3. 单词记忆时要关注时态、语态。
    4. 学习的内容不能重复,也就是每次学习的上下文要发生改变,不能是固定的句子。
    5. 要根据记忆曲线自动重复出现,以巩固学习。

    查找了一圈没有符合以上需求的软件,便决定自己撸一个(其实有一个软件很接近楼主需求了,可惜不能自定义词库,且每次出现的内容重复)。

    • 一个英文词典用于提供单词解释,首先想到的是使用柯林斯官方的 API。但是申请了好多次一直没有回信。最后不得已解析 stardict 格式的词典,并导入数据库。
    • 其次需要大量的有中英文对照的语料,用于翻译的 TMX 语料库正好能满足需求。

    有了基础数据接下来的问题就简单了。

    1. 对语料库的内容进行分词、词性分析、词性还原等操作。扣去需要记忆的单词生成填空题。
    2. 对于题目根据柯林斯词汇星级,对句子进行评分,尽量让句子出现高频词。
    3. 对于已看过的句子,进行降权。不要让学习过程重复,同时可以让出现的句子逐步变难。

    经过 N 天项目搞完。至于学习效果,只能说项目写的很开心。


    单词学习

    单词学习


    自定义词库 自定义词库


    项目地址:

    https://github.com/senghoo/wordai

    预留 Append:

    1. 本文只是分享楼主业余时间小作品。开源出来希望跟大家交流学习。不喜勿喷。
    2. 程序是根据楼主日常习惯而做的,没有想商业化或者给大家提供账号进行使用。
    3. 因为使用了柯林斯词典。又没取得相关版权,所以词典部分缺失,如需自行搭建请自行转换。此部分不提供技术支持。
    4. 可能有点标题党,项目仅仅是用了自然语言处理的分词、词性分析、词性还原等基本操作。勉强搭上边。
    5. 目前想再添加一个发音 api,看了 Google 的合成效果好的太贵,科大讯飞的英语发音也需要购买发音者,希望能大家推荐能有免费额度的语音合成平台(非赢利业余项目,不想花费太多。前期买高质量的 TMX 库都花了不少钱)。
    17 回复  |  直到 2019-11-28 11:26:17 +08:00
    balabalaguguji
        1
    balabalaguguji   86 天前
    很棒,之前我也一直想做一个自己的背单词软件,当时想的是玩游戏闯关被单词,答对一个就攻击一次对方,可以进行在线 PK 等各种游戏玩法,做了一个基础 demo 出来,后面没继续完善了
    steveway
        2
    steveway   86 天前
    想法很好 不过 tmx 确实不太好搞 也不一定适合自己
    senghoo
        3
    senghoo   86 天前
    @balabalaguguji 这种游戏性的学习应该也不错。感觉背单词这个事情太难坚持了。

    @steveway TMX 我是专门去买了语料库。日常口语库还有词典例句库, 感觉还可以。网上可以免费下载的质量有些低。
    ZredoC
        4
    ZredoC   86 天前
    优秀!支持一下
    ZiLong
        5
    ZiLong   86 天前
    语音合成不知道这个项目能不能帮到你 https://github.com/CorentinJ/Real-Time-Voice-Cloning
    mrfox
        6
    mrfox   86 天前
    赞!
    我有个建议不知 LZ 愿不愿意实现下,非常同意单词要在语境中学
    已经实现用--自然语言处理的分词、词性分析、词性还原--这步是难点啊
    所以能否扩展个功能:
    对一篇英语文章,提取出所有单词,然后自己维护一个熟词表,程序输出所有生词?
    即:
    1、提取文章中的生词(这步我理解 LZ 已实现)
    2、对照一个 TXT 熟词表(每行一个单词)提取出生词写到另一个 TXT 里


    想到的可能会难但可先略过的问题也提及一下:
    词组理论上也可以作为单词处理,不知对比的时候有没有增加很多难度
    目前我找到的程序主要是单词还原上有问题,比如 don't aren't,自然语言处理不知有没有成熟的解决办法
    另一个就是原文中两个单词中间有可能少了个空格连在一起被识别为一个词了,可能需要 AI 解决?
    senghoo
        7
    senghoo   86 天前
    @mrfox 我也不是专业自然语言处理的。我直接使用的 nltk 的库,有很多现成的方法。
    具体实现在我的代码里在`commands/__init__.py`这个文件的_sentence_to_mongo 函数里。

    目前看来分词可以处理 don't aren't 之类的缩略词, 可以最终成 do 和 be 等原型,但是后面缩写成分无法还原。但是影响也不大,英语中可缩写的就那么几种情况。

    对于缺少空格的情况,可以尝试对于字典无法识别的单词查找“莱文斯坦距离”最小的单词来处理。这种方法同时可以处理拼写错误的情况。这个没具体做过,只是一种想法。

    从文章中提取生词这个功能我以前也想过(受恶魔奶爸的方法论影响)。但是有现成的软件可以解决我当时的需求,就没继续做了。
    senghoo
        8
    senghoo   86 天前
    @ZiLong 对于发音这块因为我没有机器可以跑模型,所以更倾向于在线服务。不过依然谢谢你提供的建议,这个项目看起来很好玩,可以做点有趣的事情。
    mrfox
        9
    mrfox   86 天前
    @senghoo 谢谢回复

    请问用的现成软件是爱英阅还是啥,感觉都大多不能很好地控制词表
    senghoo
        10
    senghoo   86 天前
    @mrfox ios 下有个蒙哥阅读器。对于我的需求是满足的。
    orzorzorzorz
        11
    orzorzorzorz   86 天前
    ![20191126215955.gif]( https://i.loli.net/2019/11/26/5mv7qFhWAwckPaO.gif)
    如果可以,试试把单词放进 reload 里 :doge
    sndnyang
        12
    sndnyang   85 天前
    不错不错, 我也弄过语境背单词的, 不过网站开发实在是弄得不好, 丑
    另外, 语料、词库也没法解决
    senghoo
        13
    senghoo   85 天前
    @sndnyang 哈哈,我也是前端苦手,这个项目大部分时间花在改 css。也尝试过学设计,无奈审美太差,怎么也学不会。
    foamvalue
        14
    foamvalue   85 天前
    仿佛找到了背单词的新方向。 准备 N+1
    YokitCoder
        15
    YokitCoder   85 天前
    之前我也根据自己的需求来定制了一个类似的记单词工具,不过一直也没有什么人用,但我一直每天坚持在用,可以说之前烂到渣的英语,现在算是有所提高了。
    https://v2ex.com/t/409590
    https://v2ex.com/t/604691
    aalikes95
        16
    aalikes95   85 天前
    谢谢分享,这个很 6
    kylinC
        17
    kylinC   84 天前
    感觉很不错,谢谢分享
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1086 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 21:51 · PVG 05:51 · LAX 13:51 · JFK 16:51
    ♥ Do have faith in what you're doing.