2013-05-09 73 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

相關問題