我正在尝试用Java编写一个程序来标记文本文件中的句子。每个标记都有一个关联的关键字数组。当且仅当句子包含属于标签数组的一个或多个关键字时,标签才应用于句子。
例如我有两个标签:故障和适应。在那些标签的数组中,我有诸如Bugs,Fail等字样的故障,以及波兰语,清理以适应。其中一个句子是'BUG found and fixed',它将进入故障类别,因此它将在标题错误之后输入句子,因为它包含单词'bug'。我在网上搜索了它是怎么做的,但似乎找不到任何东西。
这是我制作的数组列表:
String[] faults = {
"Misspelled",
"Error",
"Fixed",
"Change",};
和
String[] adaption = {"Fixed comments",
"Filters", "Polish","Adjust"};
感谢任何帮助。谢谢。 :)
答案 0 :(得分:1)
我不确定我是否正确理解了您的问题,但如果是这样,您可能想要尝试使用Hashmap。您将拥有一对,并使用特定的.get()方法可以检索其值。
答案 1 :(得分:1)
您可能需要查阅java.lang.String上的文档,了解如何查看字符串是否包含某个子字符串(或如何将其拆分为单词)...并查看java.lang.HashMap,还
答案 2 :(得分:1)
不容易得到你想要的东西:)但我想我明白了......
由于你的两个小组,你有两个arraylist。 adaption
和fault
将成为两个群组......
String[] sentences = split()
句子,你应该分成'。',',','!'和所有句子结束标记。您应该使用正则表达式split(.|?|!|)
可以为原型执行此操作。String[] words=split(\\s+)
所以找到空格\\s+
代表你所有的空格(\t \r \n
等等)Group1.get("the word you present itareted")
一样,这可以快速推动你的应用;)我也可以为你写源代码,但我觉得更好的只是给你一些提示,怎么做。如果需要任何帮助,请写信 GL!
答案 3 :(得分:1)
我认为你可以通过使用正则表达式做得更好。对于每个类别,定义正则表达式模式,然后尝试将模式与文件的每一行匹配(我假设您的短语逐行):
import java.util.regex.*;
// ...
Pattern faults = Pattern.compile("Misspelled|Error|Fixed|Change");
Pattern adaption = Pattern.compile("Fixed Comments|Filters|Polish|Adjust");
// I assume I can read from BufferedReader 'in'.
for ( String line = in.readLine() ; line != null ; line = in.readLine() ) {
if ( faults.matcher(line).find() ) {
// Classify as fault
}
if ( adaption.matcher(line).find() ) {
// Classify as adaption
}
}
请注意,find()
方法会返回true
或false
,具体取决于是否找到匹配项。
我建议您查看java.util.regex
包的Java documentation和/或Jeffrey Friedl的书"Mastering Regular Expressions"。也许Java Tutorial Regular Expressions Trail也可以提供帮助。