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

标签 java regex

我正在尝试从文本文件中提取包含 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”和“milan”的句子(句子边界是句号后跟空格),即第三句话(顺序并不重要。需要任何包含这两个词的句子)
  • 我尝试了上面的正则表达式模式和许多其他模式
  • 但它会提取“milan”之后的部分句子或从第一个“he”开始的 2 个句子
  • 请建议一种使用正则表达式或 java 中的任何其他方法来完成此任务的方法

(我正在努力提取两个实体之间的关系模式:在本例中,关系模式“诞生于”实体“edison”和“milan”。 我需要从大量相关文本文件或网络文档中获取上述句子[例如爱迪生的传记或谷歌上“爱迪生米兰”的前 500 个链接]来进行进一步处理)

最佳答案

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

I want the sentence (sentence boundary is full stop followed by space).

好吧。使用String split方法来获取句子。使用句号(句号)后跟一个或多个空格作为正则表达式。我将把这个正则表达式的构造留给您。

With the words 'he' and 'milan'

好吧。编写一个方法来输入单词并将其添加到 List 中。

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

当您找到包含第一个单词的句子时,循环遍历单词列表,检查列表中的单词是否位于按单词边界分割的句子中。如果找到所有单词,您就找到了匹配的句子。如果您没有找到所有单词,请继续下一句。

循环遍历句子的拆分字符串数组后,您要么有一个句子,要么有多个句子,要么没有任何句子包含您的单词列表。

关于java - 从java文本文件中提取包含2个单词的句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16467947/

相关文章:

java - 将上限限制为 Java 泛型方法中给定类型之一

java - 为应用程序生成测试数据

java - Google Guava/提供功能集合类型的实现

java - 如何添加名为: `-DurlParams=intent=REGULAR&auto=w1` 的java系统属性

regex - 正则表达式查找某些字符之间的匹配并包含特定字符

java - 使用 Notepad++ 清理文本

java - 您的 InputStream 既不是 OLE2 流,也不是 OOXML 流

MySQL 正则表达式 + 空格 (\s)

java - Java中阿拉伯标点符号的匹配

php - 如何在 PHP 中使用正则表达式来匹配这种类似数组的表示法?