如何使用java清理脏文本[关闭]

Posted

技术标签:

【中文标题】如何使用java清理脏文本[关闭]【英文标题】:How to clean dirty text using java [closed] 【发布时间】:2015-06-07 16:23:34 【问题描述】:

我正在从 twitter 收集数据并对其进行处理,但我遇到的问题是:文本很脏,

例子:

String dirtyText="this*is#a*&very_dirty&String";

示例:

String dirtyText="All f dis happnd bcause u gave ur time, talent n passion.";

我希望它尽可能简单。

【问题讨论】:

您输入的脏字符串与您的输出脏字符串不匹配? 为了让我们提出解决方案,您必须告诉我们“干净”的要求是什么意思 第一个可以通过删除非字母字符来实现。但是没有“简单”的方法来做第二个 我想分析 twitter 中的人物文本(tokenize,POS),但是如果文本是那种形式的,这将不起作用,或者如果有其他方法可以处理它 @KickButtowski 我得到文本来分析并在我的项目中使用它,, 【参考方案1】:

这不是一个容易解决的问题。 All f dis happnd 可以“清理”以产生 All *of* this happenedAll *if* this happened。对于第一个示例,您可以仅将所有非字母字符替换为空格。请参阅this question 了解如何执行此操作。

否则我认为您需要一个自然语言处理器,或者至少需要一个拼写检查器。用正确的英语猜测一条推文应该是什么是一个非常复杂的问题。看看Jazzy 的开源拼写检查器。

【讨论】:

【参考方案2】:

公共类 CleaningDirtText private static final StringdirtyText = "thisis#a&very_dirty&String";

public static void main(String[] args) 
    /*
     * remove leading and trailing spaces, and split our words into a String array.
     * The split method allows you to break apart text on a given delimiter. In this
     * case, we chose to use the regular expression \\W, which represents anything
     * that is not a word character:
     */

    System.out.println(dirtyText);
    String[] words = dirtyText.toLowerCase().trim().split("[\\W\\d]+");
    for (int i = 0; i < words.length; i++) 
        System.out.print(words[i]);
    
    System.out.println("\nsee the cleand text:-");
    for (String clean : words) 
        System.out.print(clean + " ");
    

【讨论】:

【参考方案3】:

公共类 CleaningDirtText /* * 删除前导和尾随空格,并将我们的单词拆分成一个字符串数组。 * split 方法允许您在给定的分隔符上拆分文本。在这个 * case,我们选择使用正则表达式\W,它代表任何东西 * 不是单词字符: / private static final StringdirtyText = "thisis#a*&very_dirty&String";

public static void main(String[] args) 
    System.out.println(dirtyText);
    String[] words =    dirtyText.toLowerCase().trim().split("[\\W\\d]+");
    // System.out.println(preparedText);
    //String[] cleanText = dirtyText.toLowerCase().trim().split("[\\W]+");
    for (String clean : words) 
        System.out.print(clean + " ");
    

【讨论】:

你为什么要发布你的answer两次?你能edit 解释一下为什么你的代码可以解决 OP 的问题吗?

以上是关于如何使用java清理脏文本[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

脏检查 和 缓存清理机制

Hibernate——脏检查和缓存清理机制

如何在java中提取网页文本内容? [关闭]

java多线程,如何防止脏读数据

如何使用Java关闭appium中的键盘?

如何使用基于标签的 XML::Twig 解析器在 Unix 上清理 xml 文件 [关闭]