java - 如何在常用词过滤器的java正则表达式中添加词列表

标签 java regex

这是我过滤一些常用词的正则表达式:

copyInputString.replaceAll("\\b(" +"http"+ ")\\b", " ");

如何替换“http”以包含单词列表?我的意思是用用于过滤的单词列表替换单个单词。

代码怎么写?我试过:

String commonWords = "http + haha + ...";

但它不起作用。需要帮助

最佳答案

最佳方法取决于您要过滤的干扰词数量、您要执行的替换类型以及您要处理的文本量。

单词噪声

清除

如果您只是做一些简单的事情,比如删除所有出现的“http”、“otherword”和“anotherword”,您可以使用 OR 语句为此创建一个正则表达式:

\b(http|otherword|anotherword)\b

如果您要清除大量单个单词的列表,并且您正在处理相对较短的字符串,您可以只创建一个干扰词的哈希集,然后标记输入字符串,这样您就可以检查每个标记是否是噪音词。

自定义替换

您可以将其制成包含单词和替换值的 HashMap ,而不是制作噪声词的哈希集。

多词噪声

清除

如果你想清除多词噪音,第一种方法仍然有效:

\b(短语一|短语二|四字噪声短语)\b

如果列表变得非常大,这也会变得很丑陋。

自定义替换

如果您想用多词短语进行自定义替换,事情就会变得更加复杂。你可以玩一个 String.indexOf(String) 的循环来查看你的噪音短语是否在那里,你可以运行多个正则表达式替换,或者你可以为一个丑陋的组合正则表达式中的每个单词创建唯一的捕获组:

\b((短语一)|(短语二)|(四字短语))\b

如果捕获到的组为2,则匹配第一个短语。如果是 3,则短语 2 匹配。等等......然后你从你的 HashMap /数组/任何东西中获取相应的替换值并将其插入。



如果您最终使用正则表达式并且性能开始下降,请记住您通常可以组合多个表达式以实现更高效的替换过程:

"apple", "apples", "applesauce"-> apple(s(auce)?)?

关于java - 如何在常用词过滤器的java正则表达式中添加词列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18941982/

相关文章:

java - 阅读文本文件后如何打印完整句子?

regex - 是否可以在 Ruby 中使用正则表达式匹配字符串 "\b"(退格字符)?

java - 为什么 MyBatis 在执行每条语句后都会关闭 session ?

java - 在内部类中访问变量 "name"。需要声明为final

java 。数组每个值的简单 TimerTask

java - 使用 Mockito.inOrder 验证模拟方法是否以准确的顺序被调用

android - Android 中的正则表达式用于电子邮件、用户名和手机号码

javascript - Cloudinary 公共(public) ID 的正则表达式

php - preg_match 验证 URL slug

regex - 从 MS Access 中的字符串提取/转换日期