Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java从文本文件中提取包含两个单词的句子_Java_Regex - Fatal编程技术网

用java从文本文件中提取包含两个单词的句子

用java从文本文件中提取包含两个单词的句子,java,regex,Java,Regex,我试图从文本文件中提取包含两个单词的句子。我使用了regex,如下代码所示 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();

我试图从文本文件中提取包含两个单词的句子。我使用了regex,如下代码所示

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...."
  • 我想要一个句子(句子边界是句号,后面是空格)加上“他”和“米兰”,即第三个句子(顺序不重要。任何句子都需要这两个词)
  • 我试过上面的regex模式和许多其他模式
  • 但它会在“milan”之后提取部分句子,或者从第一个“he”开始提取两个句子
  • 请推荐一种使用正则表达式或java中的任何其他方法完成此任务的方法
(我正在提取两个实体之间的关系模式:在本例中,关系模式是“born in”,b/w实体“edison”和“milan”。 我需要大量相关文本文件或网络文档中的上述句子[如爱迪生传记或谷歌“爱迪生米兰”的前500个链接]进行进一步处理)

请澄清:

  • 你的语料库是否一致:所有的传记的格式是否与语法相同
  • 如果是这样的话,您需要您的模式匹配什么,或者更好,您需要从匹配中检索什么?例如,您是否需要带有“Edison”和“Milan”的键值对?还是
如果您的语料库不一致,那么正则表达式可能就不适合使用了。
如果是这样的话,你可能会想使用字典等——这可能是一项艰巨的工作

我的建议是不要期望正则表达式完成所有处理,而是一步一步地处理文本

我想要这个句子(句子的边界是句号,后跟空格)

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

“他”和“米兰”

好的。写一个方法来输入单词并将它们添加到列表中

编写另一个方法来遍历使用另一个拆分方法创建的字符串数组,将句子拆分为单词。同样,我将把这个正则表达式的构造留给您

找到第一个单词的句子时,在单词列表中循环,检查列表中的单词是否在单词边界上拆分的句子中。如果你找到所有的单词,你就会找到一个匹配的句子。如果你没有找到所有的单词,继续下一个句子


一旦你在拆分字符串数组中循环,你要么有一个句子,要么有多个句子,要么没有包含单词列表的句子。

+yeah d语料库不一致。我的任务S2提取关系模式b/w实体+例如:对于爱迪生n米兰来说,帕特恩可能是“出生在/出生地/出生地等”我应该从相关文档的数量中提取这两个单词的句子n使用一种频率过滤器来提取这些模式,因为这些模式经常出现然后我也应该使用字典……是的,前面还有一些艰苦的工作:)+到现在为止,我需要两个给定单词的句子。我明白了。所以,“我需要两个给定单词的句子”,你的意思是你想检查包含名字的句子1的语料库,以及后面包含“出生于”表达式的句子2,如果是,从这两个句子中提取名字和位置候选词。我对你的理解正确吗?我希望这个句子同时包含“爱迪生”和“米兰”两个词。如果没有找到匹配项,我将搜索带有“他”和“米兰”的句子。相关文本文档中的这些句子显然会包含诸如“出生地/出生地/出生地等”之类的关系模式,这些关系模式可以在进一步处理后提取出来,然后我会使用字典:常见的城市/城镇名称、常见或著名的姓氏、一个带有“出生地”表达式,还有一个带有代词。表达式的正确组合将允许您挖掘所需的数据。不过,我认为在这里尝试起草任何具体的实施方案是远远超出范围的。您可以开始检查复杂的解析/挖掘工具,例如。。。对不起,我不能说得更具体了!我尝试使用字符串拆分方法,但我给出的正则表达式模式或其他一些东西有问题。
File doc=new File(“D:\\aMyFile.txt”);BufferedReader br=null
字符串行
br=new BufferedReader(新文件阅读器(doc))
while((line=br.readLine())!=null){for(String-retval:line.split(\.\s”))System.out.println(retval);}
对于代码格式很抱歉。使用back ticks``但不知道如何使用回车是的,我把文本分成了几个句子,然后使用正则表达式。现在很好用。