Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查和计算linkedHashset中的单词是否出现在arraylist中的句子中?_Java_String_Arraylist_Hashset_Word Count - Fatal编程技术网

Java 如何检查和计算linkedHashset中的单词是否出现在arraylist中的句子中?

Java 如何检查和计算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

我在这个问题上纠缠了几天。我希望能够检查和计算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 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}