我希望能够从文本文件中提取文本作为令牌 - 例如,说我有一个包含句子的文本文件:从文本文件中提取令牌?
这是一个很好的餐厅,
相信我!
我想提取这个内容作为“标记” - 例如,一个标记将是“它是”,下一个标记将是“”,之后的那个将是“一个”,然后“”,然后是“好”,然后是“餐馆”,然后是“,”和“\ 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