2010-10-28 70 views
1

我有一套具有半正規格式的文檔。行通常由換行符分隔,每行的主要組成部分由空格分隔。一些例子是一套傢俱裝配說明,一套目錄,一套配方和一套銀行對賬單。解析半結構化數據 - 我可以使用任何分類器嗎?

問題在於,每組中的每個樣本與其同級成員的不同之處在於使RegEx解析不可行:項目的數量可能在項目名稱之前或之後出現,相同的項目在樣本之間可能有不同的名稱,行之間可能存在說明文字或註釋等。

我已經使用了分類器(Neural Nets,Bayesian,GA和GP)來處理整個文檔或數據集,但不是從文檔中提取項目並對它們進行分類在上下文中。這可以做到嗎?有沒有更可行的方法?

回答

2

如果您的數據有結構,可以說您可以使用語法來描述某些結構。 (通常你使用語法來識別他們可以做什麼,通常是太多,並且使用額外的語法檢查來刪除語法不能消除的東西)。

如果您使用可以運行並行潛在語法的語法,這樣可以在語法不可行時消除語法分析,您可以直接解析不同的語句。 (GLR解析器可以很好地完成這項工作)。

成像您有NUMBERS描述數量,描述各種對象的NOUNS和操作的VERBS。 然後可以接受的項目不同的順序語法可能是:

G = SENTENCE '.' ; 
SENTENCE = VERB NOUN NUMBER ; 
SENTENCE = NOUN VERB NUMBER; 
VERB = 'ORDER' | 'SAW' ; 
NUMBER = '1' | '2' | '10' ; 
NOUN = 'JOE' | 'TABLE' | 'SAW' ; 

此示例極其簡單,但它會處理:

JOE ORDERED 10. 
JOE SAW 1. 
ORDER 2 SAW. 

它還將接受:

SAW SAW 10. 

您可以通過添加演員必須是人的外部約束來消除此情況。

+0

謝謝艾拉 - 這清理了很多。你有沒有用於生成GLR解析器的指針,或者更多地解釋「外部」(例如外部約束或外部語法檢查)? – codekaizen 2010-11-04 00:22:45

+0

Bison將生成GLR解析器。您可能可以使用Elkhound http://scottmcpeak.com/elkhound。作爲一般背景,您可以從http://en.wikipedia.org/wiki/GLR_parser瞭解更多信息。關於外部約束:通常語法規則具有相關的語義行爲。爲了滿足我們的需求,我們在15年前推出了自己的GLR解析器,其中之一就是使語義操作可能反對(並因此否定減少)。你可以附加約束條件,例如堅持第二個SENTENCE規則,即NOUN必須是一些演員,而SAW則不是。 – 2010-11-04 01:59:07

0

有很多方法可以做到這一點。這是一個活躍的研究領域,名爲:information extraction。特別是從半結構化來源中提取信息。

相關問題