我希望能夠從文本文件中提取文本作爲令牌 - 例如,說我有一個包含句子的文本文件:從文本文件中提取令牌?
這是一個很好的餐廳,
相信我!
我想提取這個內容作爲「標記」 - 例如,一個標記將是「它是」,下一個標記將是「」,之後的那個將是「一個」,然後「」,然後是「好」,然後是「餐館」,然後是「,」和「\ n」,然後是「相信」,「」,「我」,「!」。所以我猜想一個方法就是令牌不是單詞就是單詞。
這裏是我到目前爲止(我檢查,看看是否該令牌是一個字還是沒有在程序的其他地方,這種方法只是返回的下一個標記):
public Token next() {
if (c == -1) {
throw new NoSuchElementException();
}
Writer sw=new CharArrayWriter();
try {
while (c != -1 && Character.isLetter(c)) {
sw.write(c);
c = r.read();
}
while (c != -1 && !Character.isLetter(c)) {
c = r.read();
}
} catch (IOException e) {
c = -1;
return null;
}
return null;
}
現在我有將值返回爲'null',因爲我不確定如何使用編寫器將其作爲令牌導出。有沒有人有任何提示?謝謝!
正則表達式確實是一個解決方案,但我認爲,一個只會匹配的是完全由你mentionned字符類之一的琴絃......你用貪婪的量詞,和一個語句,所以當它發現一系列字母字符時,它滿足4個組中的一個,而其他字符將被忽略,即使沒有匹配整個字符串...我想,我不是真正的正則表達式大師。 。 – MarioDS 2012-04-09 19:15:38
挑戰在於定義什麼是一個詞的一部分,什麼不是。上面的正則表達式是一個基於不同類型字符的例子。標點符號的一些字符,如撇號,可以加入字母字符中,解決分離問題:「[\\ p {Alpha} \\'] + | \\ p {Digit} + | \\ p {Punct} + | \\ p {空格} +「的確,每個模式都必須匹配整個單詞,數字,空格等...... – elias 2012-04-09 19:47:15