gpt4 book ai didi

java - 如何从句子数组列表中获取包含特定单词的句子?

转载 作者:行者123 更新时间:2023-12-01 10:44:46 24 4
gpt4 key购买 nike

我正在构建一个 android/Java 程序,它从文本文件中读取并将文本文件中的每个句子存储在数组列表中。然后它检查每个句子中特定单词的出现情况并打印出包含该单词的句子。

这是我到目前为止的代码:

    protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.text4);
text = (TextView)findViewById(R.id.info2);
BufferedReader reader = null;

try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("input3.txt")));

String line;
List<String> sentences = new ArrayList<String>();


}

}

}

从上面的代码中可以看出,程序会查找单词“尽管”。

我的文本文件由三个句子组成。如果我的文本文件使用以下结构排列(该结构在每个句子后都有一个换行符),则该程序可以完美地输出带有单词“尽管”的特定句子。

但是,如果文本文件按以下结构排列(每个句子后没有换行符),程序将在输出屏幕上输出所有三个句子。

我不想在文本文件中的每个句子后面添加换行符以使该程序正常工作。如何更改我的代码,使其适用于任何类型的文本文件,无论其结构如何?

最佳答案

您的split()根本不起作用。首先,您的表达式将仅匹配这个确切的子字符串:

.?!\r\n\t

最后的额外标签也包含在匹配中。

您可能想使用字符类,例如[0-9] ,但你忘记了括号。

line恰好是文件中的一行文本,为什么要在 \r 上分割?和\n ?另外,为什么制表符( \t )被视为句子分隔符?

下一部分 split() 有问题,事实是您只取第一个值( [0] )。如果拆分成功,则会丢弃第二句和第三句。

此外,在查找单词时,请确保不匹配更长的单词,例如如果寻找is ,不匹配this ,因此您需要包含字边界检查 ( \b )。

确保匹配的 token ,例如句号包含在句子中,您需要使用零宽度正向后查找非捕获组 ( (?<=X) )。

单词匹配也应该不区分大小写。

最后,代码结构是错误的。它不会编译,因为你缺少一个结束括号( } )。由于糟糕的缩进,这变得更加困惑。

这里是更新的代码:

try (BufferedReader reader = new BufferedReader(
new InputStreamReader(getAssets().open("input3.txt")))) {

List<String> sentences = new ArrayList<>();
for (String line; (line = reader.readLine()) != null; ) {
for (String sentence : line.split("(?<=[.?!\t])")) {
sentence = sentence.trim();
if (! sentence.isEmpty()) {
sentences.add(sentence);
}
}
}

Pattern word = Pattern.compile("\\bDESPITE\\b", Pattern.CASE_INSENSITIVE);
for (String sentence : sentences) {
if (word.matcher(sentence).find()) {
text.setText(sentence);
break; // No need to continue searching
}
}

} catch (IOException e) {
Toast.makeText(getApplicationContext(), "Error reading file!", Toast.LENGTH_LONG).show();
e.printStackTrace();
}

关于java - 如何从句子数组列表中获取包含特定单词的句子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34253227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com