chenhaiyang 6173b32f69 add upgrade command into README | 4 سال پیش | |
---|---|---|
sim | 4 سال پیش | |
tests | 4 سال پیش | |
.gitignore | 4 سال پیش | |
LICENSE | 4 سال پیش | |
MANIFEST.in | 4 سال پیش | |
README.md | 4 سال پیش | |
setup.py | 4 سال پیش |
sim-dict 是一个计算文本相似度的模块,支持词语、短文本、长文本相似度计算;对中文字符提供包含语义的相似度计算,非中文字符只支持字符层面的相似度计算。
>>> from sim.text_sim import get_similarity
>>> get_similarity('环境算法实现', '温度控制策略')
0.7166666666666667
建议使用 virtualenv 创建虚拟环境作为开发和生产环境,virtualenv 是用来为应用创建一套“隔离”的 Python 运行环境的工具。
首先,用 pip 安装 virtualenv
$ pip3 install virtualenv
假如我们要开发一个新的项目,需要一套独立的 Python 运行环境,可以这么做:
第一步,创建目录:
~ mkdir myproject
~ cd myproject
第二步,创建一个独立的 Python 运行环境,命名为 venv:
~/myproject virtualenv -p /usr/bin/python venv
Running virtualenv with interpreter /usr/bin/python
Already using interpreter /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
New python executable in /Users/highing/code/python/test/venv/bin/python
Installing setuptools, pip, wheel...
done.
参数 p 用来指定创建环境使用的 Python 解释器的路径,比如我们要使用 Python 3.8 版本的虚拟环境,可以用版本为 3.8 的解释器路径来替 代 -p 后边的参数,这样创建的环境也就是 Python 3.8 了
命令 virtualenv 就可以创建一个独立的 Python 运行环境,新建的 Python 环境就被放到当前目录下的 venv 目录。我们可以通过 source 命令进入环境
~/myproject source venv/bin/activate
(venv) ~/myproject
sim-dict 目前已经被打包放在公司的私服仓库了,我们可以在创建好的虚拟环境安装它
(venv) ~/myproject pip install short-text-sim -i http://dev.dp.sagacloud.cn:8082/repository/saga-pypi-group/simple --trusted-host dev.dp.sagacloud.cn
上述命令可以加上 --upgrade 参数完成更新操作。
在 sim-dict 实现的文本相似度计算方法中,大概分为分词、词相似度计算、文本相似度计算三个步骤。
「同义词词林」是梅家驹等人与 1983 年词林编撰完成的,后经哈工大更新扩展,sim-dict 是在扩展版基础上实现的。 词林根据词语的含义、类型、词性将所收录的汉语词分为了 12 大类,从大到小一共五层,第五层成为原子词群,意为不可再分,每个原子词群都有一个五层结构的编码,比如 Aa01C02=。
根据词林建立一个「词——编码」的哈希表,通过这样的哈希表,就可以查询词的编码。获取两个待计算相似度词的编码,对比两个编码,根据匹配程度计算相似度。编码具有五个层级, 从大到小匹配得分分别为 3,3,2,1,1,总分为 10 分,匹配累计得分与总分的比值即为相似度。
将两个待计算相似度的文本进行分词操作,我们这里用的分词工具是结巴分词。根据分词结构计算词相似度,得到如下的词相似度矩阵 分别获取该矩阵每行、每列的最大值的均值,计算这两个平均值的均值,即为这两个文本的相似度。
- | 环境 | 算法 | 实现 |
---|---|---|---|
温度 | 0.4 | 0.3 | 0.2 |
控制 | 0.1 | 0.3 | 0.4 |
策略 | 0.4 | 0.6 | 0.2 |
往词林是添加新词(词林未收录的词)没有明确统一的方法,主要基于个人对于词林对理解,下边是我们常用的思路。
对于一个新词,尝试列举它的同义词、近义词,如果它的同/近义词在词林里,那么将该新词直接放在它的同/近义词所在的原子词群即可,这样通过词林计算二者相似度的时候即可得到最高的分数, 与我们认为的二者是同义/近义是相符的。
如果无法列举该词合适的同/近义词,或者该词的同/近义词未被词林收录,我们要尝试总结该词的类型、词性、词义,并根据词林分类的逻辑,将其放入合适的词群或者建立新的词群和与之对应的编码。 比如“空调主机”要放在第一大类“物”里,第二大类“机具”里,第三类“机器 工具 泵”里……
如果该词是多义的,对于每一个词义,按照上述逻辑分别执行添词操作即可。
由于基于词林方法的性质,即通过人的理解将词分类,并以此为基础进行词、句相似度的计算,所以目前来说无法通过机器自动完成新词添加操作,这也是这种方法维护最为繁琐的地方。