[英]How to remove all stopwords from each line of string using the weka.core.Stopwords java class
[英]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.