如何统计每个单词出现了多少次?
how to count how many times each word appears?
我正在尝试计算 uniqueBagOfWords 中的每个单词在 'sentences' 数组列表中的每个句子中出现的次数。
uniqueBagOFwords = [i, like, to, play, tennis, think, football, needs, big, changes]
我希望能够计算 uniqueBagOfWords 中的一个词在每个句子中出现了多少次....目前我只能在该词出现的位置上加 1,但我会喜欢加上它出现的次数。目前它打印出这个:
我喜欢打网球= 1111100000
我认为足球需要大的改变 = 1000011111
我喜欢足球足球 = 1100001000
我将如何更改此代码以便打印出以下内容..
我喜欢打网球= 1111100000
我认为足球需要大的改变 = 1000011111
我喜欢足球足球 = 1100002000
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 football");
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);
}
for (String s : sentences) {
StringBuilder numOfOccurences = new StringBuilder();
int count = 0;
for (String word : uniqueBagOfWords) {
if (s.contains(word)) {
numOfOccurences.append(count+1);
} else {
numOfOccurences.append("0");
}
}
System.out.println(s + " = " + numOfOccurences);
}
}
我不完全确定你的目标。
如果只想在一行中打印输出,而不是在每个数字末尾换行,只需使用:
System.out.print(s + " = " + numOfOccurences);
而不是
System.out.println(s + " = " + numOfOccurences);
请注意使用 print
而不是 println
。 println
自动将换行符 (\n
) 添加到输出的末尾。
但也许还可以查看 java.lang.Array
以获取一些有用的搜索实用程序。注意:数组需要排序后才能搜索。
https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html
这里有很多不错的实用程序。
祝你好运:-)
这确实不是最好的解决方法,但它确实有效
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 football");
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);
}
for (String st : sentences) {
StringBuilder numOfOccurences = new StringBuilder();
int[] array ={0,0,0,0,0,0,0,0,0,0};
int num=0;
for (String s : st.split(" ")){
num=0;
for (String word : uniqueBagOfWords) {
if (s.equals(word)) {
array[num] = array[num]+1;
}
num++;
}
}
num=0;
for(int number : array){
numOfOccurences.append(number);
}
System.out.println(st + " = " + numOfOccurences);
}
这是我得到的输出:
我喜欢打网球= 1111100000
我认为足球需要大的改变 = 1000011111
我喜欢足球足球 = 1100002000
您可以像这样重写最后一个 for 循环:
for (String s : sentences) {
StringBuilder numOfOccurences = new StringBuilder();
for (String word : uniqueBagOfWords) {
int count = 0;
for (String wordFromSentence : s.split(" ")) {
if (wordFromSentence.equals(word)) {
count++;
}
}
numOfOccurences.append(count);
}
System.out.println(s + " = " + numOfOccurences);
}
我正在尝试计算 uniqueBagOfWords 中的每个单词在 'sentences' 数组列表中的每个句子中出现的次数。
uniqueBagOFwords = [i, like, to, play, tennis, think, football, needs, big, changes]
我希望能够计算 uniqueBagOfWords 中的一个词在每个句子中出现了多少次....目前我只能在该词出现的位置上加 1,但我会喜欢加上它出现的次数。目前它打印出这个:
我喜欢打网球= 1111100000
我认为足球需要大的改变 = 1000011111
我喜欢足球足球 = 1100001000
我将如何更改此代码以便打印出以下内容..
我喜欢打网球= 1111100000
我认为足球需要大的改变 = 1000011111
我喜欢足球足球 = 1100002000
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 football");
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);
}
for (String s : sentences) {
StringBuilder numOfOccurences = new StringBuilder();
int count = 0;
for (String word : uniqueBagOfWords) {
if (s.contains(word)) {
numOfOccurences.append(count+1);
} else {
numOfOccurences.append("0");
}
}
System.out.println(s + " = " + numOfOccurences);
}
}
我不完全确定你的目标。
如果只想在一行中打印输出,而不是在每个数字末尾换行,只需使用:
System.out.print(s + " = " + numOfOccurences);
而不是
System.out.println(s + " = " + numOfOccurences);
请注意使用 print
而不是 println
。 println
自动将换行符 (\n
) 添加到输出的末尾。
但也许还可以查看 java.lang.Array
以获取一些有用的搜索实用程序。注意:数组需要排序后才能搜索。
https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html
这里有很多不错的实用程序。
祝你好运:-)
这确实不是最好的解决方法,但它确实有效
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 football");
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);
}
for (String st : sentences) {
StringBuilder numOfOccurences = new StringBuilder();
int[] array ={0,0,0,0,0,0,0,0,0,0};
int num=0;
for (String s : st.split(" ")){
num=0;
for (String word : uniqueBagOfWords) {
if (s.equals(word)) {
array[num] = array[num]+1;
}
num++;
}
}
num=0;
for(int number : array){
numOfOccurences.append(number);
}
System.out.println(st + " = " + numOfOccurences);
}
这是我得到的输出:
我喜欢打网球= 1111100000
我认为足球需要大的改变 = 1000011111
我喜欢足球足球 = 1100002000
您可以像这样重写最后一个 for 循环:
for (String s : sentences) {
StringBuilder numOfOccurences = new StringBuilder();
for (String word : uniqueBagOfWords) {
int count = 0;
for (String wordFromSentence : s.split(" ")) {
if (wordFromSentence.equals(word)) {
count++;
}
}
numOfOccurences.append(count);
}
System.out.println(s + " = " + numOfOccurences);
}