使用NLP技术的单词之间的距离

时间:2018-10-25 14:12:32

标签: math matrix nlp

Given是一组单词,例如{柏林,柏林,柏林,BeRlin,柏林,柏林,柏林}。在某些情况下,我必须照原样对待这些单词(不能更改为统一大小写)。我必须选一个。是否有使用NLP的解决方案可以帮助我实现这一目标,例如,选择一个与大多数人最接近的人。

谢谢

1 个答案:

答案 0 :(得分:1)


您可以使用Sorensen–Dice系数进行此操作。


coefficientRatio =((2 * |X∩Y|)/(| X | + | Y |))


其中,
| X | &| Y |是两组的基数,
|X∩Y|是两组中共同元素的数量

系数范围为0-1,其中1高度相似,0最小相似。


因为您需要将集合区分大小写:
用任何符号替换字符集。 (注意:使用ascii值可能会
急剧改变准确率)。我建议将
字符编码为不同的符号,以保持准确性。


例如:
b ='!',e ='@',r ='#',l ='$',i ='%',n ='^',
B ='&',E ='*',R ='(',L =')',I ='?' ,N ='{'


代码:-

var oldSet = ['Berlin' , 'BERLIN' , 'BERlin', 'BeRlin','berlin','berliN' , 'berLIN'];
var newSet = ['&@#$%^', '&*()?{', "&*($%^", "&@($%^", "!@#$%^", "!@#$%{", "!@#)?{"];

var ratio= [];

for(var i=0; i<newSet.length-1; i++) {
    for(var j=i+1; j<newSet.length; j++) {
        var cof= getCoefficient(newSet[i], newSet[j], getIntersection(newSet[i], newSet[j]));
        print("\n\n" + oldSet[i] + "====" + oldSet[j] + "===>" + cof);
        ratio.push(cof);        
    }
    print("\n");      
}

//This function will return coeffiecient between 0 to 1
function getCoefficient(x, y, commonCnt) {
    return ((2*commonCnt) / (x + y));
}


输出:-

    Berlin====BERLIN===>0.16666666666666666


    Berlin====BERlin===>0.6666666666666666


    Berlin====BeRlin===>0.8333333333333334


    Berlin====berlin===>0.8333333333333334


    Berlin====berliN===>0.6666666666666666


    Berlin====berLIN===>0.3333333333333333




    BERLIN====BERlin===>0.5


    BERLIN====BeRlin===>0.3333333333333333


    BERLIN====berlin===>0


    BERLIN====berliN===>0.16666666666666666


    BERLIN====berLIN===>0.5




    BERlin====BeRlin===>0.8333333333333334


    BERlin====berlin===>0.5


    BERlin====berliN===>0.3333333333333333


    BERlin====berLIN===>0




    BeRlin====berlin===>0.6666666666666666


    BeRlin====berliN===>0.5


    BeRlin====berLIN===>0.16666666666666666




    berlin====berliN===>0.8333333333333334


    berlin====berLIN===>0.5




    berliN====berLIN===>0.6666666666666666