String 如何从一组字符串中提取常用词
假设我们有这样的字符串:String 如何从一组字符串中提取常用词,string,algorithm,String,Algorithm,假设我们有这样的字符串: Tommy is a very good child Tommy has a very wonderful child Tommy loves his very child 我想将上述3个字符串的常用词提取为: Tommy*very*child 我该怎么做?谢谢。编辑我刚刚意识到@Joce的评论,我用JavaScript给出了我的答案。但它可以很容易地适应其他语言。如果不是JavaScript,则将其视为伪代码 编辑2哇!它在我第一次尝试时工作得很好!请参阅上的工
Tommy is a very good child
Tommy has a very wonderful child
Tommy loves his very child
我想将上述3个字符串的常用词提取为:
Tommy*very*child
我该怎么做?谢谢。编辑我刚刚意识到@Joce的评论,我用JavaScript给出了我的答案。但它可以很容易地适应其他语言。如果不是JavaScript,则将其视为伪代码 编辑2哇!它在我第一次尝试时工作得很好!请参阅上的工作示例 这可能是一个非常庞大的脚本解决方案,但下面是: 将原始句子作为字符串数组给出:
var sentences = [
"Tommy is a very good child",
"Tommy has a very wonderful child",
"Tommy loves his very child"
];
您可以尝试从每个数组创建一个单词数组,并将其存储在多维数组中
var split = [];
for(var i = 0; i < sentences.length; i++) {
split[i] = sentences[i].split(" ");
}
var split=[];
for(var i=0;i<句长;i++){
拆分[i]=句子[i]。拆分(“”);
}
您也可以在这里删除重复的单词,但我不知道如何当场删除,但您可能会得到一些简单的算法来执行此操作。当然,除非你允许重复单词短语
然后,您可以使用相同的单词创建另一个数组,并按如下方式填充:
var same = [];
for(var i = 0; i < split.length; i++) { // loop through sentences
for(var j = 0; j < split[i].length; j++) { // go through each sentence for new words
if(same.indexOf(split[i][j]) <= -1) { // if not already found
var inAll = true;
for(var k = 0; k < split.length; k++) { // check if in every sentence
if(k == i) continue;
if(split[k].indexOf(split[i][j]) <= -1) inAll = false; // if not found, make `inAll` false
}
if(inAll) same.push(split[i][j]); // if found in all other sentences, add to array `same`
}
}
}
var same=[];
对于(var i=0;i 如果(same.indexOf(split[i][j])EDIT我刚刚意识到@Joce的评论,我用JavaScript给出了我的答案。但是它可以很容易地适应其他语言。如果不是JavaScript,就把它当作伪代码
编辑2哇!在我第一次尝试时,它工作得非常出色!请参阅上的工作示例
这可能是一个非常庞大的脚本解决方案,但下面是:
将原始句子作为字符串数组给出:
var sentences = [
"Tommy is a very good child",
"Tommy has a very wonderful child",
"Tommy loves his very child"
];
您可以尝试从每个数组创建一个单词数组,并将其存储在多维数组中
var split = [];
for(var i = 0; i < sentences.length; i++) {
split[i] = sentences[i].split(" ");
}
var split=[];
for(var i=0;i<句长;i++){
拆分[i]=句子[i]。拆分(“”);
}
你也可以在这里删除重复的单词,但我不知道如何当场删除,但你可能会得到一些简单的算法来完成。当然,除非你允许重复的单词短语
然后,您可以使用相同的单词创建另一个数组,并按如下方式填充:
var same = [];
for(var i = 0; i < split.length; i++) { // loop through sentences
for(var j = 0; j < split[i].length; j++) { // go through each sentence for new words
if(same.indexOf(split[i][j]) <= -1) { // if not already found
var inAll = true;
for(var k = 0; k < split.length; k++) { // check if in every sentence
if(k == i) continue;
if(split[k].indexOf(split[i][j]) <= -1) inAll = false; // if not found, make `inAll` false
}
if(inAll) same.push(split[i][j]); // if found in all other sentences, add to array `same`
}
}
}
var same=[];
对于(var i=0;i 如果(same.indexOf(split[i][j])保持简单,我将在这里使用:
我之所以使用lodash
,仅仅是因为它提供了一种简洁的方法,用于描述您实际要做的事情,即基于(例如)分隔符和变换的联合
联合是独立于语言的:用于实现联合的算法将根据您选择的语言有所不同
您可以在函数中使用它,在函数中定义分隔符(例如,我是否在空格处分隔?)和转换(例如,单词是否必须大写才能匹配?为了保持简单,我将在这里使用:
我之所以使用lodash
,仅仅是因为它提供了一种简洁的方法,用于描述您实际要做的事情,即基于(例如)分隔符和变换的联合
联合是独立于语言的:用于实现联合的算法将根据您选择的语言有所不同
您可以在函数中使用它,在函数中定义分隔符(例如,我是否在空格处分隔?)和转换(例如,单词是否必须大写才能匹配?您可以使用名为反向索引的数据结构
首先,为每个输入字符串指定一个唯一的整数。然后,对于输入字符串中的每个单词,您希望计算一个整数列表,表示该单词出现在其中的字符串。请注意,只需处理所有输入字符串即可轻松完成此操作。在您的情况下,为了获得所有字符串中出现的单词,您可以输出出现列表中条目数与输入中字符串数相同的单词
有关更多详细信息,请参阅此处:
您可以使用名为反向索引的数据结构
首先,为每个输入字符串指定一个唯一的整数。然后,对于输入字符串中的每个单词,您希望计算一个整数列表,表示该单词出现在其中的字符串。请注意,只需处理所有输入字符串即可轻松完成此操作。在您的情况下,为了获得所有字符串中出现的单词,您可以输出出现列表中条目数与输入中字符串数相同的单词
有关更多详细信息,请参阅此处:
所谓“部分”是指“整个单词”还是指单个字符或一组字符?编辑谢谢clarifying@JonathanLam,我的意思是以单词为单位。谢谢。你说的“部分”是指“整个单词”吗?还是可以是单个字符或一组字符?编辑谢谢clarifying@JonathanLam,我的意思是用词单位。谢谢。是吗“一个提供一致性、模块性、性能和附加功能的JavaScript实用程序库。”我不确定它是什么,所以我希望这能为其他人澄清。是“一个提供一致性、模块性、性能和附加功能的JavaScript实用程序库”。我不确定它是什么,所以我希望这能为其他人澄清。