如何扩充词头(将各种单词变形加入索引)

查词遇到的困难:
在查询单词的过去式或者其他变形时无法重定向到单词原型,例如查找wanted时无法自动重定向到want。

可能的解决方法:
经过学习和搜索,目前解决这类问题有以下两种常见的方法:

  1. 使用goldendict和mdict软件,里面自带的词典可以实现此功能
  2. 在制作词典的过程中,把单词变形作为一个单独的词条加入mdx源文件中。以want和wanted为例,词头为单词变形wanted,词条为@@@LINK=want。

方法一的普适性不够强,大家常用的另外一款软件欧路词典是不能自动跳转的,而是出现一个提示——“是否要查询want”(还是以查询wanted举例)。本人在电脑端使用goldendict而手机端则是欧路词典(ios系统上最好用的应该就是欧路词典了),所以这种方法对我来说不够理想。而第二种方法则需要一定的编程基础,我自己目前已经大致学习了mdx词典制作的基础知识,在查找扩充词头的教程无果后特来此求助。

PS:学习此技术主要是想扩充牛津搭配词典的词头

2 个赞

我说一下我的思路,如果词条内已经存在变体是最方便的,直接设置LINK指向就行。如果没有,需要有一个对照表或者转换规则,这种推测单词原形的叫lemmatize。个人测试WordNetLemmatizer的转换结果比较好。
下面是我写的一个简单的示例。
安装nltk
pip install nltk
运行test.py
python test.py
显示:
apples
单词: apples 原形推测: apple 词性: n.
buses
单词: buses 原形推测: bus 词性: n.
单词: buses 原形推测: bus 词性: v.
quizzes
单词: quizzes 原形推测: quiz 词性: n.
单词: quizzes 原形推测: quiz 词性: v.
candies
单词: candies 原形推测: candy 词性: n.
单词: candies 原形推测: candy 词性: v.
abaci
单词: abaci 原形推测: abacus 词性: n.
gone
单词: gone 原形推测: go 词性: v.
better
单词: better 原形推测: good 词性: adj.
单词: better 原形推测: well 词性: adv.
wanted
单词: wanted 原形推测: want 词性: v.
would
doing
单词: doing 原形推测: do 词性: v.
具体的使用就是调用lemmatize_word.py中的lemmatize_word函数,获得推测的原形,然后自己再进行其他处理。
lemmatize_word.zip (10.3 MB)

1 个赞

非常感谢jns大佬!!!牛津搭配词典词条内没有变体,对照表或者转换规则我也没有积累。不知道大佬有对照表的推荐吗?

不是大佬,也是自学自用,我了解的方法就是用WordNetLemmatizer,代码都在上面,有没有其他更好的方法我也不太清楚。

谢谢,我去研究一下代码

我好像理解错了,你大概是要在不知道变体的情况下获得变体,而不是反过来。
data.txt (379.6 KB)
从pattern.en的en-verbs.txt提取了这个数据,第一列是基本型,然后是一个制表符\t,后面是变体,用逗号,分开。
一共8400个词

再次感谢!!!

不知道有没有形容词和名词的变形对照表。我下了pattern.en这个包,发现里面有 Comparative() 等函数可以查找形容词的比较级,还有其它的函数可以找形容词和名词的变形。但是我暂时没有发现类似于en-verbs.txt类似的对照表,抱歉再次麻烦您。好像可以直接通过编程实现而不用对照表,或者提取别的词典中的变形生成一份变形对照表。请问一下这两种方法比较常见的是哪一种啊,感觉编程实现方便快捷,但是我看很多人都是从某个词典中提取变形对照表再去扩充词头。(PS:刚刚尝试了一下直接编程实现问题有点多,主要是pattern内置的函数效果不好,例如查找单词复数的函数plurilaze(),输入介词with也会出现结果withs。而且pattern中查找单词词性的函数貌似只有引用wordnet库的pos函数,试了一下没法很好的找出单词的词性,所以也就没法先确定单词词性再调用对应的函数。)

1 个赞

我百度了一下,有个pos_tag判断词性的,你试试效果怎么样。
nltk.pos_tag([‘with’,‘apple’,‘good’,‘do’,‘best’])
[(‘with’, ‘IN’), (‘apple’, ‘NN’), (‘good’, ‘JJ’), (‘do’, ‘VBP’), (‘best’, ‘JJS’)]
IN介词连词,N开头名词,J开头形容词,VB开头副词,JJS形容词最高级

谢谢,还是有点不理想,一个单词可能有多重词性。我从简明英汉词典里提取了一份变形对照表,提取完才发现它只有动词和形容词的变形,我再去找本词典提取下名词。adj_and_verb.txt (496.3 KB)

1 个赞