【问题标题】:remove stop words from a string in order to create clusters从字符串中删除停用词以创建集群
【发布时间】:2020-10-05 23:20:35
【问题描述】:

我需要使用 openrefine 来获得一些集群。它是用 Java 编写的。

我无法实现的是我应该如何更改代码:

https://github.com/OpenRefine/OpenRefine/blob/master/main/src/com/google/refine/clustering/binning/FingerprintKeyer.java

尤其是在第 93 行:

https://github.com/OpenRefine/OpenRefine/blob/c76e2b9a461ed5b353ebf5c80e0e0cad2163331c/main/src/com/google/refine/clustering/binning/FingerprintKeyer.java#L93

s = s.trim(); // first off, remove whitespace around the string
s = s.toLowerCase(); // TODO: This is using the default locale. Is that what we want?
s = normalize(s);
s = punctctrl.matcher(s).replaceAll(""); // decomposition can generate punctuation so strip it after
String[] frags = StringUtils.split(s); // split by whitespace (excluding supplementary characters)
TreeSet<String> set = new TreeSet<String>();
for (String ss : frags) {
   set.add(ss); // order fragments and dedupe
}

以便在生成集群之前也删除单词“and”、“&”符号?

提前感谢您的帮助

【问题讨论】:

  • 我不确定你在问什么,你需要使用那个库,但是你需要改变行为?
  • 确切地说,我需要更改提到的行中的代码,因此从有问题的 tsring 中,还要排除诸如“and”、“the”、“&”之类的圆顶词
  • 你不能改变lib的行为,在这种情况下你需要在你的项目中实现一个新的类并使用它,或者创建一个lib的fork并自己编译(注意推荐)。类似public class MyOwnFingerprintKeyer extends FingerprintKeyer 和@Override 之类的要更改的方法
  • 我打算更改代码并自己编译,问题是我没有设法实现我想要更改上述代码的目的。所以如果有人能给我一个工作代码,我就可以编译源代码

标签: java


【解决方案1】:

将要从字符串中移除的单词或字符放入 String[] 数组中,然后使用循环执行任务来移除:

String[] alsoReplace = {"and", "the", "&"};
for (String str : alsoReplace) {
    s = s.replaceAll("(?i)" + str + "(\\s+)?" , "");
}

【讨论】:

  • 要在此行之前添加建议的代码: String[] frags = StringUtils.split(s); // 由空格分隔(不包括补充字符)第 90 行。至少这是我尝试解决这个问题的地方
猜你喜欢
  • 1970-01-01
  • 2013-12-16
  • 2014-05-22
  • 1970-01-01
  • 2014-06-06
  • 2015-02-25
  • 1970-01-01
  • 2019-12-18
相关资源
最近更新 更多