簡體   English   中英

從 Java 中的字符串中刪除停用詞

[英]Remove stopwords from a string in Java

我有一個字符串,里面有很多我需要計算的單詞。

但我想避免一些對上下文沒有意義的詞。

所以,我有一個文件,其中包含我將忽略的所有單詞。 我打開這個文件並創建一個我調用的列表

ArrayList<String> stopWordsList;

現在我有了字符串,需要清理它,從列表中刪除停用詞。

我試過這樣:

String example = "Job in a software factory. Work with Agile, Spring, Hibernate, GWT, etc.";

for(String stopWord : stopWordsList){
    example = example.replaceAll(" "+ stopWord + " ", " ");
}

在此之后,字符串示例應該是:

“工作軟件工廠。工作敏捷,Spring,Hibernate,GWT,。”

問題是“等”。 沒有刪除它,因為單詞后面的點。

然后我嘗試:

for(String stopWord : stopWordsList){
    example = example.replaceAll(" "+ stopWord + " ", " ");    
    example = example.replaceAll(" "+ stopWord + ",", ",");     
    example = example.replaceAll(" "+ stopWord + ".", ".");
}

但是,這是不對的,它不能滿足我的需求。

任何人都可以幫我找到一種方法來清理這個字符串,包括標點符號或空格之前的單詞。

PS:我不能只做

 example = example.replaceAll(stopWord, " ");   

因為這可以打破一些像“初始”這樣的詞。 它將刪除“in”並讓我“itial”。

最簡單的方法可能是將String沿單詞邊界分割,然后添加除停用詞以外的所有內容。

StringBuilder result = new StringBuilder(example.length());
for (String s : result.split("\\b")) {
    if (!stopWordsSet.contains(s)) result.append(s);
}

看起來您只想在單詞的兩邊都包含非單詞字符時替換該單詞。 為此既要先行又要先行是很簡單的。

諸如雙倍空格,句點之后的逗號以及沿這些界線的東西等可能存在問題,但這聽起來與您的應用程序無關,如果解決的話,這會有些含糊。

與此類似的東西應該起作用:

example = example.replaceAll("(?![^ a-zA-Z])" + stopWord + "(?=[^ a-zA-Z])", "")

其中(?![^ a-zA-Z])是對否定的否定項(向后看),既不是空格也不是字符,而(?=[^ a-zA-Z])是前瞻性等效項。

希望有幫助,如果您還有其他問題,或者這對您的應用程序不理想,請讓我知道。

這不會刪除標點符號。 由於這些是先行和后退,因此它們實際上與所討論的標點不匹配。

如果您還希望它也使用重音符號,則可以用兼容POSIX的[:alpha:]代替傳統的\\w正則表達式。

example = example.replaceAll("(?![^ [:alpha:]])" + stopWord + "(?=[^ [:alpha:]])", "")

創建了一個小型util庫,以從給定文本及其在Maven存儲庫/ github中刪除停用詞/詞尾

散發圖書館

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM