我正在用Java編寫自然語言處理應用程序,我正在使用來自IMDB和Amazon的數據。用單個匹配替換連續出現的多個字符
我遇到了一個特定的數據集,其中有像partyyyyy
這樣的詞。這些詞對我的分類算法不好。所以,我想刪除它們並添加party
而不是partyyyyyyy
。
我該怎麼做?
我正在用Java編寫自然語言處理應用程序,我正在使用來自IMDB和Amazon的數據。用單個匹配替換連續出現的多個字符
我遇到了一個特定的數據集,其中有像partyyyyy
這樣的詞。這些詞對我的分類算法不好。所以,我想刪除它們並添加party
而不是partyyyyyyy
。
我該怎麼做?
你可以使用它的快速實現的代碼片段。
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();
}
有沒有英文單詞,我知道有超過兩個連續相同的字母。
這一做法將不抓!
partyy
「屈尊」(加那曖昧是, 「停止」 與一個額外的 「O」 或簡單地「彎腰」)
您可以使用正則表達式來查找具有相同字母的信件後,至少兩次(因爲我們不想在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
感謝人,它的工作就像一個魅力,它也很容易。 –
嘗試使用循環,
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);
是的,它是一個很好的接近,但它錯誤地編輯像hello hello的話......我不想要...在你的腦海裏有沒有其他的應用程序。 –
你可能會用\ p {L} \ p {M} *代替[A-ZA-Z],包括非英語Unicode字母爲好。所以它會是這樣的:replaceAll("(\\p{L}\\p{M}*)(\\1{" + maxAllowedRepetition + ",})", "$1");
或者這個:replaceAll("(\\p{L}\\p{M}*)\\1{" + maxAllowedRepetition + ",}", "$1");
「看看是否形成了一個有效的單詞」如何檢查單詞是否有效? –
大概你有一些你正在比較的字典。如果沒有,那就沒辦法了! – supergra
請注意,Pshemo的回答很好,但它無法解決某些含糊不清的問題,如「彎腰」與「停止」,這兩個詞都是有效的! – supergra