Java Shingle Pairs

时间:2015-02-18 14:09:09

标签: java arrays arraylist

我正在编写一个程序,我正在努力从文本文件中的每个句子创建shingle对。现在我的代码用Java读取.txt文件并按顺序输出每个句子。我想分别存储每个句子,然后取出每个句子并创建它们的2个字符的带状疱疹,这些带状疱疹将存储在一个数组中。这方面的一个例子是将“快速棕狐”的句子变成{th,he,e,q,qu,ui,ic,ck,k,b,br,ro,ow,wn,n, f,fo,ox}这样就可以解释单词之间的所有空格。我的目标是简单地获取每个句子并为每个句子创建一个数组,其中包含像上面示例中那样的木瓦对。我的问题是我不知道如何解决这个问题。我似乎无法弄清楚如何把句子分开存储,我不知道如何创建瓦片对。我还是Java的新手,非常感谢任何帮助。到目前为止,这是我的代码:

//Takes .txt file as command-line input parameter
File file = new File(args[0]);
Scanner scanner = new Scanner(new FileInputStream(file)); 
int i=0;

//Reads in and outputs each line from the file
while (scanner.hasNextLine()) {
System.out.print(++i + " : " + scanner.nextLine() + "\n");
}  

2 个答案:

答案 0 :(得分:2)

只需从[0,1]到[last-1,last]

中取出一对字符
String[] result = new String[sentence.length() - 1];
for (int i = 0; i < sentence.length() - 2; i++)
{
    result[i] = sentence.substring(i, i + 2);
}

如果你是nead,你可以在这个循环之后用trim()删除空格。

答案 1 :(得分:0)

要分成句子,您可以使用模式匹配。只需为您的任务定义什么是有效的sentene。在这里,我假设一个句子总是以点,问号或感叹号结束;并且下一个句子在一个或多个空格后开始

final Pattern sentencePattern = Pattern.compile("[\\.\\?!]+\\s+");
sentencePattern.splitAsStream(text).forEach(
        System.out::println //your code here
);