gpt4 book ai didi

java - 如何在我的代码中找到丢失的边缘情况

转载 作者:太空宇宙 更新时间:2023-11-04 14:00:56 24 4
gpt4 key购买 nike

我正在使用映射缩减作业处理推文。我想做的一件事就是审查辱骂性言论。当我在本地测试我的代码时,它会按预期工作。但是,当我在整个数据集上运行某些文本时,它会审查滥用词语,但会遗漏一些词语。现在,由于数据大小总计 1TB(800 个文件),我无法找到原始形式 (JSON) 的特定推文数据,以便我可以在本地测试它以查找问题。然而,我有推文文本(不是整个 json),它从我的 map 缩减程序中未经审查。为了测试,我尝试将该文本放入其他推文 json 的推文文本字段中,并且程序正确地审查了滥用单词。你们能建议我找到错误的任何策略吗?或者,如果您仅通过查看我的代码就发现了错误,那就太好了循环遍历推文所有单词的函数(推文按非字母数字字符分割)

public static String censorText(String text, String textWords[], 设置禁止) { StringBuilder 构建器 = new StringBuilder(text);

    textWords = getTextArray(text);

for (int i = 0; i < textWords.length; i++) {

if (banned.contains(textWords[i].toLowerCase())) {

String cleanedWord = cencor(textWords[i]);
// compile a pattern with banned word
List<Integer> indexList = getIndexes(builder, textWords[i]);
replaceWithCleanWord(builder, indexList, cleanedWord);
}
}

return builder.toString();
}
//function to find the position of abuse word in the tweet text so that //can be replaced by censored word
private static List<Integer> getIndexes(StringBuilder builder, String string) {

List<Integer> indexes = new ArrayList<Integer>();
String word = "(" + string.charAt(0) + ")" + string.substring(1);
System.out.println("word to match" +word);
Pattern p = Pattern.compile("(?<=^|[^a-zA-Z\\d])" + word + "(?=$|[^a-zA-Z\\d])");
Matcher m = p.matcher(builder.toString());
while (m.find()) {
indexes.add(m.start());
}
return indexes;
}

我要审查的示例文本: "text":"感谢 cuantoporno y http://t.co/ 的所有事项,#sex #sexo #porn #porno #pussy #xxx;"仅当该单词被特殊字符或空格包围时才对其进行审查 "text":"感谢 cuantoporno y http://t.co/ 的所有事项,#s*x #sexo #porn #porno #p***y #xxx;"

第一个文本是我的 map 缩减的输出,但预期输出是第二个文本。当我在本地计算机上为同一个 java 文件输入相同的文本时,我得到了预期的结果。可能是什么问题?

最佳答案

除了lookahed/lookbehind之外,您没有使用任何正则表达式功能。 Java 正则表达式搜索中的 Lookahead 和 Lookbehind 未进行优化。您也可以搜索该字符串,然后验证前后字符是否正确。

这会节省大量性能:

  • 正则表达式的编译成本很高(与字符串搜索编译相比)
  • 使用正则表达式进行搜索的成本甚至更高(与字符串搜索相比)

因此,如果您想解决该问题:请使用字符串搜索算法(如 boyer-moore-horspool)。

如果您使用多字符串搜索算法,例如 set-horspool 或 wu-manber,它会变得更加高效。这样的算法将提供所有单词的所有索引,性能接近 O(n)(n 是文本的长度)。

关于java - 如何在我的代码中找到丢失的边缘情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29314263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com