2011-12-08 115 views
-1

我不知道是否有任何線索如何開始寫我自己的停用詞刪除,而我不想使用任何外部libraries.after創建HashSet後,我們如何將它放到工作中去除文本的停止詞?再一次,我不想使用任何外部庫。java中的停用詞去除

+0

您是否需要[this]?(http://www.textfixer.com/resources/common-english-words.txt) – chance

+0

您可以從文件或資源中讀取停用詞。 – Ingo

+1

我不太明白你的問題是什麼:你想以某種方式計算停用詞是什麼,或者你需要一種更快的方式將你定義的那些添加到集合中? – Thomas

回答

2

我會從文件中讀取它們。每字一行。

Set<String> stopWords = new LinkedHashSet<String>(); 
BufferedReader br = new BufferedReader(new FileReader("stop-words.txt")); 
for(String line;(line = br.readLine()) != null;) 
    stopWords.add(line.trim()); 
br.close(); 

if(stopWords.contains(word)) 
    // it's a stop word 
else 
    // it's not a stop word. 
+0

+1使用link @chance提供的你可以將它們放在一行中,並且需要使用'''作爲分隔符來分割它們。但這只是該文件內容的另一種格式:) – Thomas

+0

所以在創建這樣的HashSet之後,如何將其投入工作? – seventeen

+0

@MostafaAlli我已經添加了一個使用集合的例子。 –

1

如果你有一組停止的話,你要刪除從停止單詞的列表,只需遍歷列表,刪除包含在設置止損的話任何話:

Set<String> stopWords = new HashSet<String>(); 
//fill stopWords 

//use a linked list to make removal faster, you don't need random access here 
List<String> text = new LinkedList<String>(); 
//fill text 

Iterator<String> textIterator = text.iterator(); 
while(textIterator.hasNext()) { 
    //this assumes there are no null entries in the list  
    //and all stopwords are stored in lower case 
    if(stopWords.contains(textIterator.next().toLowerCase())) { 
    textIterator.remove(); 
    } 
} 
+0

耶!那看起來像我的意思:) – seventeen

0

那麼,你如何做停用詞移除的一般想法是,你將輸入文本分成單詞,然後在停用詞映射中查找每個單詞。停用詞查找可能需要不區分大小寫。

具體內容取決於文本內容以及打算如何處理。

+0

我知道,但是當我們發現停止詞,如何從文本中取出它? – seventeen

+0

@MostafaAlli - 當你從單詞中重新排列文字時,你不會將它從文本中刪除。看到我的答案。 –