Java 如何检查和计算linkedHashset中的单词是否出现在arraylist中的句子中?
我在这个问题上纠缠了几天。我希望能够检查和计算uniqueBagOfWords中的每个单词是否出现在一个句子中,例如 UniqueBagOfWords=[我,喜欢,去,玩,网球,思考,足球,需要,大,变化] 产出将是- 我喜欢打网球=1,1,1,0,0,0,0,0 我喜欢足球,比如=1,2,0,0,0,0,1,0,0,0Java 如何检查和计算linkedHashset中的单词是否出现在arraylist中的句子中?,java,string,arraylist,hashset,word-count,Java,String,Arraylist,Hashset,Word Count,我在这个问题上纠缠了几天。我希望能够检查和计算uniqueBagOfWords中的每个单词是否出现在一个句子中,例如 UniqueBagOfWords=[我,喜欢,去,玩,网球,思考,足球,需要,大,变化] 产出将是- 我喜欢打网球=1,1,1,0,0,0,0,0 我喜欢足球,比如=1,2,0,0,0,0,1,0,0,0 public static void main(String[] args) { List<String> sentences = new Arra
public static void main(String[] args) {
List<String> sentences = new ArrayList<String>();
sentences.add("i like to play tennis");
sentences.add("i think football needs big changes");
sentences.add("i like football like");
List<String[]> bagOfWords = new ArrayList<String[]>();
for(String str : sentences){
bagOfWords.add(str.split(" "));
}
Set<String> uniqueBagOfWords = new LinkedHashSet<String>();
for(String[] s : bagOfWords){
for(String ss : s)
for(String st : ss.split(" "))
if(!uniqueBagOfWords.contains(st))
uniqueBagOfWords.add(st);
}
publicstaticvoidmain(字符串[]args){
列出句子=新建ArrayList();
添加(“我喜欢打网球”);
添加(“我认为足球需要大的改变”);
添加(“我喜欢足球”);
List bagOfWords=new ArrayList();
for(字符串str:句子){
bagOfWords.add(str.split(“”);
}
Set uniqueBagOfWords=new LinkedHashSet();
for(字符串[]s:BagoWords){
用于(字符串ss:s)
用于(字符串st:ss.split(“”)
如果(!uniqueBagOfWords.contains(st))
添加(st);
}
我已经试过了,我知道这是不对的,但我不知道从这里去哪里。任何帮助都将是伟大的
for(String s : sentences){
for(String ss : s.split(" ")){
int count= 0;
for(int loop=0; loop <uniqueBagOfWords.size(); loop++){
if(uniqueBagOfWords.contains(ss)){
count +=1;
}
}
System.out.println(ss +" "+ count);
for(字符串s:句子){
用于(字符串ss:s.split(“”){
整数计数=0;
对于(int-loop=0;loop这里,我只是为单词包创建了一个字符串数组,并将所有句子放入一个arraylist。然后我进行了比较,以检查句子中特定位置的字母是否与BagoWords数组中的位置相匹配
public static void main(String[] args) {
String[] bagOfWords = {"i", "like", "to", "play", "tennis", "think", "football", "needs", "big", "changes"};
List<String> sentences = new ArrayList<String>();
sentences.add("i like to play tennis");
sentences.add("i think football needs big changes");
sentences.add("i like football");
for(String s1 : sentences){
String[] sentenceSplit = splitWords(s1);
for(int i=0;i<sentenceSplit.length;i++){
if(sentenceSplit[i].equals(bagOfWords[i])){
System.out.print("1 ");
}
else{
System.out.print("0 ");
}
}
System.out.println("");
}
}
private static String[] splitWords(String sentence){
String[] afterSplit = sentence.split(" ");
return afterSplit;
}
publicstaticvoidmain(字符串[]args){
String[]bagOfWords={“i”、“like”、“to”、“play”、“网球”、“think”、“football”、“needs”、“big”、“changes”};
列出句子=新建ArrayList();
添加(“我喜欢打网球”);
添加(“我认为足球需要大的改变”);
添加(“我喜欢足球”);
for(字符串s1:句子){
String[]sentenceSplit=splitWords(s1);
对于(int i=0;i尝试在哈希集中循环,而不是在句子中的每个单词中循环。此外,我将使用StringBuilder或类似的工具进行输出。查看下面的循环:
for (String s : sentences) {
StringBuilder numberOfOccurences = new StringBuilder();
for (String word : uniqueBagOfWords) {
if (s.contains(word)) {
numberOfOccurences.append("1,");
} else {
numberOfOccurences.append("0,");
}
}
System.out.println(s + " = " + numberOfOccurences);
}
输出:
我喜欢打网球
我认为足球需要大的改变
我喜欢football=1,1,0,0,0,1,0,0,0,我认为数组是错误的数据结构。更好的选择是简单地绘制袋子中每个单词的计数,这是一行:
Map<String, Integer> hits = Arrays.stream(sentence.split(" "))
.filter(uniqueBagOfWords::contains)
.collect(groupingBy(identity()), counting());
这似乎更简单。如果你绝对必须有一个(稀疏)数组,你可以作为一个单独的步骤来创建它。你为什么要使用set呢?你可以只使用arraylist。你如何从“我喜欢打网球”中得到1,1,1,1,0,0,0,0,0,0
?既然是“网球”,不应该有5个吗是否在包中?您有一个哈希集。您不需要遍历它。只需使用contains()
。如何更新此代码,使其计算单词出现的次数?例如,如果足球在一个句子中出现两次,它将打印2。谢谢!当哈希集有一个O(1)时,为什么要反转代码并循环通过哈希集contains()在哈希集的情况下。即使你使用contains,你也必须检查单词是否在正确的位置。为此,我认为你需要将句子分解成单词。或者你可以只使用集合吗?我很困惑。
{i=1, like=2, football=1}