未从字符串中正确删除停用词
Stop words not being correctly removed from string
我有一个函数可以从文件中读取停用词并将其保存在 HashSet 中。
HashSet<String> hset = readFile();
这是我的字符串
String words = "the plan crash is invisible";
我正在尝试从字符串中删除所有停用词,但它无法正常工作
我得到的输出: plan crash invible
我想要的输出=> plan crash invisible
代码:
HashSet<String> hset = readFile();
String words = "the plan crash is invisible";
String s = words.toLowerCase();
String[] split = s.split(" ");
for(String str: split){
if (hset.contains(str)) {
s = s.replace(str, "");
} else {
}
}
System.out.println("\n" + "\n" + s);
不需要检查你的字符串是否包含停用词或拆分你的字符串,你可以使用 replaceAll
,它使用正则表达式,像这样:
for (String str : hset) {
s = s.replaceAll("\s" + str + "|" + str + "\s", " ");
}
示例:
HashSet<String> hset = new HashSet<>();
hset.add("is");
hset.add("the");
String words = "the plan crash is invisible";
String s = words.toLowerCase();
for (String str : hset) {
s = s.replaceAll("\s" + str + "|" + str + "\s", " ");
}
s = s.replaceAll("\s+", " ").trim();//comment and idea of @davidxxx
System.out.println(s);
这可以给你:
plan crash invisible
虽然 hset.contains(str)
匹配完整的单词,但 s.replace(str, "");
可以替换出现的 "stop" 个单词,这些单词是输入 String
的单词的一部分。因此 "invisible" 变成 "invible".
既然你正在遍历 s
的所有单词,你可以构造一个 String
来包含 Set
中没有包含的所有单词:
StringBuilder sb = new StringBuilder();
for(String str: split){
if (!hset.contains(str)) {
if (sb.length() > 0) {
sb.append(' ');
}
sb.append(str);
}
}
System.out.println("\n" + "\n" + sb.toString());
我有一个函数可以从文件中读取停用词并将其保存在 HashSet 中。
HashSet<String> hset = readFile();
这是我的字符串
String words = "the plan crash is invisible";
我正在尝试从字符串中删除所有停用词,但它无法正常工作
我得到的输出: plan crash invible
我想要的输出=> plan crash invisible
代码:
HashSet<String> hset = readFile();
String words = "the plan crash is invisible";
String s = words.toLowerCase();
String[] split = s.split(" ");
for(String str: split){
if (hset.contains(str)) {
s = s.replace(str, "");
} else {
}
}
System.out.println("\n" + "\n" + s);
不需要检查你的字符串是否包含停用词或拆分你的字符串,你可以使用 replaceAll
,它使用正则表达式,像这样:
for (String str : hset) {
s = s.replaceAll("\s" + str + "|" + str + "\s", " ");
}
示例:
HashSet<String> hset = new HashSet<>();
hset.add("is");
hset.add("the");
String words = "the plan crash is invisible";
String s = words.toLowerCase();
for (String str : hset) {
s = s.replaceAll("\s" + str + "|" + str + "\s", " ");
}
s = s.replaceAll("\s+", " ").trim();//comment and idea of @davidxxx
System.out.println(s);
这可以给你:
plan crash invisible
虽然 hset.contains(str)
匹配完整的单词,但 s.replace(str, "");
可以替换出现的 "stop" 个单词,这些单词是输入 String
的单词的一部分。因此 "invisible" 变成 "invible".
既然你正在遍历 s
的所有单词,你可以构造一个 String
来包含 Set
中没有包含的所有单词:
StringBuilder sb = new StringBuilder();
for(String str: split){
if (!hset.contains(str)) {
if (sb.length() > 0) {
sb.append(' ');
}
sb.append(str);
}
}
System.out.println("\n" + "\n" + sb.toString());