在这个任务中,你的任务是编写一个程序来判断两个单词是否同义词。你会得到一本描述同义词对的同义词词典。之后,您将回答几个查询,询问给定的两个单词是否同义词。输入文件中将包含同义词对字典和程序的查询。
使用以下规则来决定:
- 如果这对单词在输入中被声明为同义词,那么它们就是同义词。
- 成为同义词并不取决于顺序,例如,如果big是large的同义词,那么large也是big的同义词。
- 我们可以间接地推导出同义词关系:如果big是large的同义词,而large是huge的同义词,那么big就是huge的同义词。
- 如果两个单词仅在大小写上不同,则它们是同义词,例如same是same, same和also same(本身)的同义词。
- 如果以上规则都不能用来判断两个词是否同义词,那么它们就不是同义词。
输入:
输入以一些测试用例T (0 输出:
对于每对查询词输出字符串同义词不同或.
样本输入
2
4
big large
large huge
small little
apple banana
6
same same
big huge
huge big
apple peach
big tall
peach PEACH
5
wood FORest
meadoW PrAirIe
WOOD Lumber
lumber forest
lumber forest
2
wood LUMBER
mEADOw fire
synonyms
synonyms
synonyms
different
different
synonyms
synonyms
different
示例问题说明
在第一个测试用例中,有6个查询:- 字是一样的
- 单词是派生的同义词。
- 与第二个查询对称。
- 不能使用任何规则派生同义词对。
- 没有规则可以用来派生同义词对,即使它们在英语中是同义词。
- 单词只是大小写不同。第二个测试用例:
- 被第三条规则定义为同义词。情况无关紧要。
哈佛大学和谷歌在2010年估计共有1,022,000个单词,并且这个数字将以每年数千个的速度增长。
所以,从逻辑上讲,你的代码应该知道所有这些,以便正常工作。这些词库及其链接和访问方法由外部api提供。您的应用程序应该使用这些api之一来搜索同义词。以下是其中的一些-
https://openbase.com/categories/js/best-nodejs-dictionary-api-libraries
Node中没有内置函数来测试某个单词是否为同义词。但是(幸运的是)有一些库可以做到这一点。
下面是一个例子:首先,从NPM安装synonyms
包:
npm i synonyms
然后,在你的JS文件中:
const synonyms = require("synonyms"); // Import the "synonyms" library
const fs = require("fs");
fs.readFile("path/to/file", "utf-8", (err, file) => {
// Read the file
const lines = file.split("n"); // Each line is split into an array
let result = lines.map(i => {
return i.split(" ");
}); // "result" holds an array of arrays. Index 0 is word 1 and index 1 is word 2
result.forEach(item => {
// Loop through our words
const s = synonyms(item[0].toLowerCase()); // Call the function
let allSynonyms = [];
for (let q in s) {
s[q].forEach(i => {
if(typeof i === "object")
i.forEach(allSynonyms.push);
else allSynonyms.push(i);
});
}
if (allSynonyms.includes(item[1].toLowerCase())) {
console.log(`Yes, "${item[0]}" is a synonym with "${item[1]}"!`); // Yes
} else {
// Nope!
console.log(`Nope, "${item[0]}" is not a synonym with "${item[1]}".`);
}
});
});
只是一个例子:)你可以在这里检查结果。运行npm start
。