tika Esiste un modulo Python per convertire RTF in testo normale?




text extract python (8)

Mi sono appena imbattuto in pyrtflib - non c'è molta (nessuna) documentazione su di esso, è un po 'come installarlo e quindi usare la funzione di aiuto () per scoprire cosa è disponibile e cosa fa tutto.

Detto questo, nella mia piccola versione di prova della sua funzione rtf.Rtf2Html.getHtml () è andata abbastanza bene. Non ho ancora provato la funzione Rtf2Txt ma vista la natura più semplice della conversione di rtf in testo normale dovrebbe andare bene mi aspetterei.

Idealmente, mi piacerebbe un modulo o una libreria che non richieda l'accesso da parte di un superutente per l'installazione; Ho dei privilegi limitati nel mio ambiente di lavoro.


Viceversa, se si desidera scrivere facilmente RTF da Python, è possibile utilizzare il modulo di terze parti rtflib . È un modulo abbastanza nuovo e incompleto ma ancora molto potente e utile. Di seguito è riportato un esempio che scrive "ciao mondo" nel testo RTF in un file RTF chiamato helloworld.rtf. Questo è un esempio molto primitivo e il modulo può anche essere usato per aggiungere colori, corsivo, tabelle e molti altri aspetti del rich text ai file RTF.

from rtflib import *
file = RTF("helloworld.rtf")
file.startfile()
file.addstrict()
file.addtext("hello world")
file.writeout()

OpenOffice ha un lettore RTF. Puoi usare python per scrivere OpenOffice, vedi qui per maggiori informazioni .

Probabilmente potresti provare a usare l'oggetto magico com su Windows per leggere tutto ciò che odora ms-binary. Non lo consiglierei comunque.

In realtà l'analisi dei dati grezzi probabilmente non sarà molto difficile, vedi questo esempio scritto in .bat / QBasic.

DocFrac è un convertitore open source gratuito tra RTF, HTML e testo. Piattaforme Windows, Linux, ActiveX e DLL disponibili. Probabilmente sarà piuttosto facile racchiuderlo in python.

RTF::TEXT::Converter - estensione Perl per convertire RTF in testo . (in caso di problemi con DocFrac).

Specifications RTF (Official Rich Text Format), versione 1.7, di Microsoft.

Buona fortuna (con i privilegi limitati nel tuo ambiente di lavoro).


Ho lavorato su una libreria chiamata Pyth, che può fare questo:

http://pypi.python.org/pypi/pyth/

La conversione di un file RTF in testo normale è simile a questa:

from pyth.plugins.rtf15.reader import Rtf15Reader
from pyth.plugins.plaintext.writer import PlaintextWriter

doc = Rtf15Reader.read(open('sample.rtf'))

print PlaintextWriter.write(doc).getvalue()

Pyth può anche generare file RTF, leggere e scrivere XHTML, generare documenti da Python markup a la Nevow, e ha un supporto sperimentale limitato per l'output di latex e pdf. Il suo supporto RTF è piuttosto robusto - lo usiamo in produzione per leggere i file RTF generati da varie versioni di Word, OpenOffice, Mac TextEdit, EIOffice e altri.


pyrtf-ng 0.9.1 non ha analizzato nessuno dei miei documenti RTF, entrambi con ParsingException. Il primo documento è stato generato con OpenOffice 3.4, il secondo con Mac TextEdit.

Pyth 0.5.6 ha analizzato senza problemi entrambi i documenti, ma non ha elaborato correttamente i simboli cirillici.

Ma ogni editor apre il documento dell'editor altrui in modo corretto e senza problemi, quindi tutte le librerie sembrano avere un supporto rtf debole.

Quindi sto scrivendo il mio parser con il blackjack e le prostitute.

(Ho caricato entrambi i file, quindi puoi controllare da solo le librerie RTF: http://yadi.sk/d/RMHawVdSD8O9 http://yadi.sk/d/RmUaSe5tD8OD )


Mi sono imbattuto nella stessa cosa e stavo cercando di codificarlo da solo. Non è così facile, ma ecco cosa ho avuto quando ho deciso di andare per una app di comando. È rubino ma puoi adattarti molto facilmente al pitone. C'è un po 'di spazzatura per l'intestazione da pulire, ma puoi vedere più o meno l'idea.

f = File.open('r.rtf','r')
 b=0
 p=false
 str = ''
 begin
    while (char = f.readchar)
        if char.chr=='{'
   b+=1 
   next
  end
        if char.chr=='}'
   b-=1 
   next
  end
  if char.chr=='\\'
   p=true
   next
  end
  if p==true && (char.chr==' ' or char.chr=='\n' or char.chr=='\t' or char.chr=='\r')
   p=false 
   next
  end
  if p==true && (char.chr=='\'')
#this is the source of my headaches. you need to read the code page from the header and encode this.
   p=false 
   str << '#'
   next
  end
  next if b>2
  next if p
  str << char.chr
    end
rescue EOFError
end
f.close

C'è una buona libreria pyrtf-ng per la gestione RTF per tutti gli usi.


Hai controllato pyrtf-ng ?

Aggiornamento: la funzionalità di analisi è disponibile se si esegue un checkout di Subversion, ma non sono sicuro di quanto sia completo. (Cerca nel modulo rtfng.parser.base .)







rtf