2013-11-24 25 views
0

我正在用Java編寫自然語言處理應用程序,我正在使用來自IMDB和Amazon的數據。用單個匹配替換連續出現的多個字符

我遇到了一個特定的數據集,其中有像partyyyyy這樣的詞。這些詞對我的分類算法不好。所以,我想刪除它們並添加party而不是partyyyyyyy

我該怎麼做?

回答

0

你可以使用它的快速實現的代碼片段。

public static String removeConsecutiveChars(String str) { 

     if (str == null) { 
      return null; 
     } 

     int strLen = str.length(); 
     if (strLen <= 1) { 
      return str; 
     } 

     char[] strChar = str.toCharArray(); 
     char temp = strChar[0]; 

     StringBuilder stringBuilder = new StringBuilder(strLen); 
     for (int i = 1; i < strLen; i++) { 

      char val = strChar[i]; 
      if (val != temp) { 
       stringBuilder.append(temp); 
       temp = val; 
      } 
     } 
     stringBuilder.append(temp); 

     return stringBuilder.toString(); 
    } 
2

有沒有英文單詞,我知道有超過兩個連續相同的字母。

  1. 遍歷所有單詞
  2. 如果這個詞有兩個以上連續相同的字母,然後:
    • 全部刪除,但兩個重複的字母,看看是否形成有效的字。
    • 否則,刪除除一個重複的字母以外的所有字母,然後查看是否形成了有效的單詞。
    • 否則,失敗。

這一做法將抓!

  • partyy

  • 「屈尊」(加那曖昧是, 「停止」 與一個額外的 「O」 或簡單地「彎腰」)

+0

「看看是否形成了一個有效的單詞」如何檢查單詞是否有效? –

+0

大概你有一些你正在比較的字典。如果沒有,那就沒辦法了! – supergra

+0

請注意,Pshemo的回答很好,但它無法解決某些含糊不清的問題,如「彎腰」與「停止」,這兩個詞都是有效的! – supergra

8

您可以使用正則表達式來查找具有相同字母的信件後,至少兩次(因爲我們不想在comma刪除正確的字母像m

String data="stoooooop partyyyyyy"; 
System.out.println(data.replaceAll("([a-zA-Z])\\1{2,}", "$1")); 
//          |  |   | 
//         group 1 match replace with 
//            from  match from group 1 
//            group 1 
//            repeated twice or more 

輸出:

stop party 
+1

感謝人,它的工作就像一個魅力,它也很容易。 –

0

嘗試使用循環,

String word="Stoooppppd"; 
    StringBuilder res=new StringBuilder(); 
    char first=word.charAt(0); 
    res.append(first); 
    for (int i = 1; i < word.length(); i++) { 
     char ch=word.charAt(i); 
     if(ch!=first){ 
      res.append(ch); 
     } 
     first=ch; 
    } 
    System.out.println(res); 
+0

是的,它是一個很好的接近,但它錯誤地編輯像hello hello的話......我不想要...在你的腦海裏有沒有其他的應用程序。 –

0

你可能會用\ p {L} \ p {M} *代替[A-ZA-Z],包括非英語Unicode字母爲好。所以它會是這樣的:replaceAll("(\\p{L}\\p{M}*)(\\1{" + maxAllowedRepetition + ",})", "$1");或者這個:replaceAll("(\\p{L}\\p{M}*)\\1{" + maxAllowedRepetition + ",}", "$1");

相關問題