2013-05-09 72 views
1

我试图从文本文件中提取包含2个单词的句子。我使用了正则表达式,如下面的代码所示。从java中的文本文件中提取包含2个单词的句子

File doc = new File("D:\\MyFile.txt"); 

BufferedReader br = null; 

System.out.println("enter the regex pattern to be matched"); 
Scanner keyboard = new Scanner(System.in); 
String regxpat = keyboard.nextLine(); 


    String line; 
    br = new BufferedReader(new FileReader(doc));  
    Pattern p = Pattern.compile(regxpat, CASE_INSENSITIVE); 



    while ((line = br.readLine()) != null) 
    { 

    try 
    { 
     Matcher m = p.matcher(line); 
     m.find(); 

     System.out.print(m.group().toString()); 

    }   
    catch (IllegalStateException e) 
    { 
    } 
    continue; 

    } 
//i tried regex= "(he)*([.&&[^\.]]*?)Milan(.*?)\." 

如果文字是:

"...Thomas Edison is a scientist. He invented bulb. He was born in Milan, Ohio, and grew up in Port Huron, Michigan. He was the seventh and last child of Samuel Ogden Edison, Jr...." 
  • 我想要的句子(句子边界句号后面的空间)的话“he'and'milan”,即第三sentnce(该命令并不重要。任何一个句子都需要这两个词)
  • 我试过了上面的正则表达式pattrn和其他很多
  • 但它提取'米兰'后的句子部分或2个句子从第一个'他
  • 请建议得到这个任务使用正则表达式或Java中的任何其他方法

(我是2个实体之间的提取关系模式的工作做了一个方法:在这种情况下,关系模式是“出生在“b/w实体”爱迪生“和”米兰“。 我需要这样的句子从众多相关[关于“爱迪生米兰”像谷歌在爱迪生的传记或第500个链接]文本文件或网页文件如上面做futher处理)

回答

0

我的建议是不要期望正则表达式能够处理所有的处理,并且一次处理文本一步。

我想要句子(句子边界是句号后跟空格)。

好。使用字符串拆分方法获取句子。使用句点(句点),后跟一个或多个空格作为正则表达式。我将把这个正则表达式的构造留给你。

上写着 '他' 和 '米兰'

精细。编写一个方法来输入单词并将它们添加到列表< String>中。

编写另一种方法来检查用另一个拆分方法创建的字符串数组,将句子拆分为单词。再次,我将把这个正则表达式的构造留给你。

当您找到第一个单词的句子时,循环单词List,检查List中的单词是否在单词边界上的句子中。如果你找到所有的单词,你找到了一个匹配的句子。如果找不到所有单词,请继续阅读下一句。

一旦您完成了拆分字符串数组的句子,您可以有一个句子,多个句子或没有包含您的单词列表的句子。

+0

谢谢:)我会尝试 – user2359384 2013-05-10 04:42:16

+0

我试过使用字符串拆分方法,但这里有一些问题与我给的正则表达式模式或别的东西。 – user2359384 2013-05-10 15:31:39

+0

'文件文档=新的文件( “d:\\ aMyFile.txt”); BufferedReader中BR = NULL;' '字符串线;' 'BR =新的BufferedReader(新的FileReader(DOC));'' while((line = br.readLine())!= null) {(retal:line.split(“\。\ s”)) System.out.println(retval); }' – user2359384 2013-05-10 15:39:30

0

请澄清:

  • 您的语料库是否一致:是否全部“传记”的格式与语法相同?
  • 如果是这样,你需要什么样的模式来匹配,或者更好,你需要从你的比赛中检索什么?例如,你需要一个与“爱迪生”和“米兰”的关键值对吗?要么...?

如果你的阴茎是一致,那么正则表达式可能不会是的路要走。 如果是这样的话,你可能想要使用字典等 - 可能会有一些艰巨的工作。

+0

+ yeah d语料库不一致。我的任务2提取关系模式b/w实体。 +例如:对于爱迪生米兰来说,可以是“出生/出生地/出生地等等”。 +我应该从这些2个单词中抽出句子。的相关文档n使用一种频率过滤器来提取这些模式,因为这些模式频繁出现。 +然后我应该使用字典也是...是啊一些艰苦的工作前进:)。 +截至目前我需要两个给定的单词的句子。 – user2359384 2013-05-10 04:40:33

+0

我明白了。因此,通过“我需要2个给定单词的句子”,你的意思是你想要检查包含名称的句子1的语料库,以及包含“出生于”表达的句子2,如果是,提取名称和位置这两个句子的候选词。我是否正确地解释你? – Mena 2013-05-10 07:07:45

+0

我想要包含'edison'和'milan'两个单词的句子。如果找不到匹配,我会用'he'和'milan'搜索句子。这样的句子从没有。的相关文本文件显然会包含像“出生/出生地/出生地等”的关系模式,然后可以在进一步处理后提取 – user2359384 2013-05-10 15:28:03

相关问题