2009-05-12 11 views
8

Qualcuno ha familiarità con il formato del documento RTF e l'analisi utilizzando qualsiasi libreria Java. Il modo in cui le persone normali hanno fatto questo è quello di utilizzare il RTFEditorKit in altalena API JDK:Analisi di documenti RTF con Java/JavaCC

Swing RTFEditorKit API

ma non è che preciso quando si tratta di parsing di documenti RTF. In effetti c'è un commento nell'API:

Il supporto RTF non è stato scritto dal team di Swing . In futuro ci auguriamo di migliorare il supporto fornito con .

Non penso che ho intenzione di aspettare che questo accada :)

L'altro approccio è quello di definire una grammatica utilizzando JavaCC e generare un parser. Funziona meglio, ma ho difficoltà a trovare una grammatica completa. Ho provato:

PMD Applied JavaCC Grammar

che è ok e il successivo (che è il migliore finora).

Koders RTFParserDelegate and ETranslate Grammar

Ci sono diverse implementazioni della grammatica eTranslate circa (lo so l'API Nutch può utilizzare questo). Qualcuno sa qual è la grammatica più accurata o se esiste un approccio migliore a questo?

ho potuto iniziare solcando la documentazione JavaCC per comprendere i file .jj e testare contro i file RTF ... questo è il mio approccio attuale, ma si sta prendendo un po 'di ... qualsiasi aiuto sarebbe apprezzato

+1

Impossibile rispondere alla domanda effettiva, ma sembra un approccio di convalida migliore (anziché utilizzare la grammatica) è quello di creare file di test e verificare che siano analizzati correttamente. Tuttavia, come ricordo, i parser RTF sono autorizzati a ignorare qualsiasi costrutto che non capiscono, consentendo la retrocompatibilità. – kdgregory

+0

Il parser ETranslate fa molto bene all'estrazione di documenti RTF (99% del set che ho), ma non è supportato e non è disponibile da una fonte centrale. Cercherò di farlo su Google Code da qualche parte ... non sono sicuro delle licenze, ha solo bisogno di correggere alcuni bug in termini di grammatica, credo ... – Jon

+0

hai fatto qualche progresso con questo? – pvgoddijn

risposta

0

Presumibilmente, la fonte di OpenOffice contiene ciò che stai cercando.

+0

Ho già guardato un OpenOffice e l'invio di documenti ad esso con JODExtractor, è un buon modo di analizzare i documenti, ma un Una soluzione piuttosto pesante visto che hai bisogno di un server con librerie X installate ecc ... non l'hai ancora escluso, ancora indagando, ma guardando a soluzioni più "leggere". – Jon

1

Qualcuno sa che è la grammatica più accurato o se vi è un approccio migliore a questo?

Molti anni fa ho trascorso un po 'di tempo a leggere RTF (Wikipedia) con C#. Dico la lettura perché se capisci RTF in dettaglio e usalo come è stato concepito, ti renderai conto che RTF non è inteso per essere letto nel suo complesso e analizzato più e più volte durante la modifica. Nella documentazione troverai lo syntax per RTF, ma non farti ingannare dal credere che dovresti usare un lexer/parser. Nella documentazione danno un sample reader per RTF.

Ricordare che RTF è stato creato molte età fa quando la memoria era misurata in KB e non in MB e la modifica di documenti lunghi di diverse centinaia di pagine in modo convenzionale avrebbe tassato le risorse di sistema. Quindi RFT ha la possibilità di essere modificato in sottosezioni più piccole senza caricare o modificare l'intero documento. Questo è ciò che gli dà la possibilità di lavorare su documenti così grandi con memoria limitata. È anche il motivo per cui la sintassi può sembrare strana all'inizio.