gpt4 book ai didi

c++ - 具有C++ vector 的文档距离算法

转载 作者:行者123 更新时间:2023-12-03 07:15:40 25 4
gpt4 key购买 nike

我试图用C++ vector 构建文档距离算法,该算法在模拟 vector 上运行良好,并给我输出0,这意味着 vector 相同为100%,但是当我用非常不同的字符串尝试时,它给我的值(value)就像一分一些小数,该值应为90或相差时在其附近,这是我的代码:

double dotProduct(vector <string> word1 , vector <string> word2) {

double dotProductSum = 0;
int frequencyD1 = 0;
int frequencyD2 = 0;


if (word1.size() > word2.size()) {

for (int i = 0; i < word1.size(); i++) {

for (int j = 0; j < word1.size(); j++) {

if (word1[i] == word1[j]) {

frequencyD1++;
}

if (word2[i] == word2[j]) {
frequencyD2++;
}

}

dotProductSum += frequencyD1 * frequencyD2;
frequencyD1 , frequencyD2 = 0;
}

}

else {

for (int i = 0; i < word2.size(); i++) {

for (int j = 0; j < word2.size(); j++) {


if (word2[i] == word1[j]) {

frequencyD1++;
}

if (word2[i] == word2[j]) {
frequencyD2++;
}

}

dotProductSum += frequencyD1 * frequencyD2;
frequencyD1, frequencyD2 = 0;
}

}

return dotProductSum;

}
测试案例:
    vector <string> doc1 = { "this" , "is" , "cat" };
vector <string> doc2 = { "Here" , "test" ,"two" };

double normalization = dotProduct(doc1, doc2) / sqrt(dotProduct(doc1, doc1) * dotProduct(doc2, doc2)) ;

cout << acos(normalization) << endl; // 1.5708

最佳答案

frequencyD1 , frequencyD2 = 0;


这是一个 comma operator expression,评估为 (frequencyD1) , (frequencyD2 = 0);,与 frequencyD2 = 0;等效,并且 frequencyD1保持不变。
要将两个变量重新初始化为 0,请使用以下命令。
   frequencyD1 = frequencyD2 = 0;

[编辑]还要...

the value should be 90 or nearby it when it difference
...
cout << acos(normalization) << endl; // 1.5708


...请注意 acos返回 radians1.5708 ≈ π/2 = 90°中的 Angular 。

关于c++ - 具有C++ vector 的文档距离算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64474438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com