Synonyms 中文近义词工具包 -- 支持文本对齐,推荐算法,相似度计算,语义偏移,关键字提取,概念提取,自动摘要,搜索引擎等

Synonyms 入门介绍

   

Chinese Synonyms for Natural Language Processing and Understanding.

最好的中文近义词工具包。

 

synonyms可以用于自然语言理解的很多任务:文本对齐,推荐算法,相似度计算,语义偏移,关键字提取,概念提取,自动摘要,搜索引擎等。

 

 

Welcome

npm install node-synonyms

本项目为 Synonyms 的 Node.js 版工具包,稳定版本为 v1,在Mac OSXLinux下完成测试。目前打包后,npm module有47MB,是由于词表文件很大,下载时需要耐心。

 

支持使用环境变量配置:

环境变量描述默认值
SYN_MODEL_W2V_PATHword2vec训练后得到的词向量文件node_modules/node-synonyms/data/words.vector
SYN_WORDSEG_CUSTOM_DICT分词用户词典node_modules/node-synonyms/data/tokenizer/user.dict.utf8
SYN_WORDSEG_STOPWORD_DICT分词停用词词典node_modules/node-synonyms/data/tokenizer/stop_words.utf8
SYN_WORDSEG_PUNCT_DICT分词标点词典node_modules/node-synonyms/data/tokenizer/punctuation.utf8

 

API

var synonyms = require("node-synonyms") # 使用上述环境变量做定制化

所有接口返回值都是Promise

 

synonyms#seg(sentence, [stopwords, punct])

分词接口

let sen1 = "移动互联网";
synonyms.seg(sen1, true, true)
    .then(function(words){
        // do your magic
        });

stopwords(Boolean)是否保留停用词,punct(Boolean)是否保留标点符号。

  • 返回值

[String],词语组成的列表。

["移动","互联网"]

 

synonyms#vector(word)

返回一个词语的向量

synonyms.vector("股市")
    .then(function(v){
        // do your magic
        })
  • 返回值 JSONArray

[float],100维的float值组成的向量。

 

synonyms#display(word)

打印一个词语的邻居们及相关度

synonyms.display("飞机");
  • 返回值 输出控制台,作为调试使用。

 

synonyms#nearby(word)

返回一个词语的邻居们

synonyms.nearby("股市")
    .then(function(results){
            // do your magic
        });
  • 返回值 JSONArray

[[words], [scores]],包含两个列表,第一个是词语,第二个是对应位置词语的距离分数,同样是在[0~1]区间,越接近于1越相似。

比如:

[
    ["股市","股价","股票市场","股灾","楼市","股票","香港股市","行情","恒指","金融市场"],
    [1,0.786284,0.784575,0.751607,0.712255,0.712179,0.710806,0.694434,0.67501,0.666439]
]

 

synonyms#compare(sentence1, sentence2)

比较两个句子的相似性

let sen1 = "移动互联网";
let sen2 = "互联网";
synonyms.compare(sen1, sen2)
    .then(function(similarity){
        // do your magic
    });
  • 返回值 float

相似度是在置信区间[0~1]的float值,越接近于1越相似。

 

Contribute

admin/test.sh # 单元测试

 

Give credits to

nodejieba

fast-levenshtein

compute-cosine-distance

node-word2vec-reader

 

Statement

Synonyms发布证书 GPL3.0。数据和程序可用于研究和商业产品,必须注明引用和地址,比如发布的任何媒体、期刊、杂志或博客等内容。

@online{Synonyms:hain2017,
  author = {Hai Liang Wang, Hu Ying Xi},
  title = {中文近义词工具包Synonyms},
  year = 2017,
  url = {https://github.com/huyingxi/Synonyms},
  urldate = {2017-09-27}
}

 

Keywords

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 HanLP portable-1.7.8 中,可以使用 SynonymDictionary 类获取近义词,并使用 SimHash 类计算两个字符串的相似度。下面是一个示例代码: ```java import com.hankcs.hanlp.dictionary.SynonymDictionary; import com.hankcs.hanlp.mining.word.SimHash; import java.util.List; public class SimilarityChecker { private SynonymDictionary dictionary; public SimilarityChecker() { dictionary = SynonymDictionary.create(true); } /** * 计算两个字符串的相似度 * * @param s1 字符串1 * @param s2 字符串2 * @return 相似度,取值范围 [0, 1] */ public double getSimilarity(String s1, String s2) { // 获取近义词列表 List<List<String>> s1Synonyms = dictionary.getSynonyms(s1); List<List<String>> s2Synonyms = dictionary.getSynonyms(s2); // 将近义词列表转换为字符串数组 String[] s1Words = flattenSynonyms(s1Synonyms); String[] s2Words = flattenSynonyms(s2Synonyms); // 使用 SimHash 计算相似度 SimHash s1Hash = new SimHash(s1Words); SimHash s2Hash = new SimHash(s2Words); return s1Hash.hammingDistance(s2Hash) / 64.0; } /** * 将近义词列表转换为字符串数组 * * @param synonyms 近义词列表 * @return 字符串数组 */ private static String[] flattenSynonyms(List<List<String>> synonyms) { StringBuilder sb = new StringBuilder(); for (List<String> group : synonyms) { for (String word : group) { sb.append(word).append(" "); } } return sb.toString().split("\\s+"); } } ``` 使用示例: ```java SimilarityChecker checker = new SimilarityChecker(); String s1 = "汽车"; String s2 = "车辆"; double similarity = checker.getSimilarity(s1, s2); System.out.println("相似度:" + similarity); ``` 输出结果: ``` 相似度:0.9375 ``` 注意,这里使用的相似度计算方法是 SimHash,它是一种快速计算文本相似度的方法,但并不一定适用于所有场景。如果需要更准确的相似度计算,可以考虑使用其他算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值