在java中使用关键字输出句子

时间:2013-01-22 15:19:57

标签: java eclipse file keyword

我正在尝试用Java编写一个程序来标记文本文件中的句子。每个标记都有一个关联的关键字数组。当且仅当句子包含属于标签数组的一个或多个关键字时,标签才应用于句子。

例如我有两个标签:故障和适应。在那些标签的数组中,我有诸如Bugs,Fail等字样的故障,以及波兰语,清理以适应。其中一个句子是'BUG found and fixed',它将进入故障类别,因此它将在标题错误之后输入句子,因为它包含单词'bug'。我在网上搜索了它是怎么做的,但似乎找不到任何东西。

这是我制作的数组列表:

String[] faults = {
            "Misspelled",
            "Error",
            "Fixed",
            "Change",};

String[] adaption = {"Fixed comments",
        "Filters", "Polish","Adjust"};

感谢任何帮助。谢谢。 :)

4 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了您的问题,但如果是这样,您可能想要尝试使用Hashmap。您将拥有一对,并使用特定的.get()方法可以检索其值。

答案 1 :(得分:1)

您可能需要查阅java.lang.String上的文档,了解如何查看字符串是否包含某个子字符串(或如何将其拆分为单词)...并查看java.lang.HashMap,还

答案 2 :(得分:1)

不容易得到你想要的东西:)但我想我明白了......

由于你的两个小组,你有两个arraylist。 adaptionfault将成为两个群组......

  1. 首先,您应该将输入中的整个文本读取为字符串。
  2. 第二,你应该找到String[] sentences = split()句子,你应该分成'。',',','!'和所有句子结束标记。您应该使用正则表达式split(.|?|!|)可以为原型执行此操作。
  3. 然后你应该将这些句子分成单词,你现在应该拆分 - )String[] words=split(\\s+)所以找到空格\\s+代表你所有的空格(\t \r \n等等)
  4. 最后你应该使用for循环迭代你的单词数组,找到你的两个或更多组中的成员匹配(适应,错误)(使用indexOf()或equals()字符串方法)...显然如果你在单词中有完全匹配,你可以使用HashMap,就像这个Group1.get("the word you present itareted")一样,这可以快速推动你的应用;)
  5. 我也可以为你写源代码,但我觉得更好的只是给你一些提示,怎么做。如果需要任何帮助,请写信 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()方法会返回truefalse,具体取决于是否找到匹配项。 我建议您查看java.util.regex包的Java documentation和/或Jeffrey Friedl的书"Mastering Regular Expressions"。也许Java Tutorial Regular Expressions Trail也可以提供帮助。