Existe-t-il un module Python pour convertir RTF en texte simple?
idéalement, je voudrais un module ou une bibliothèque qui ne nécessite pas d'accès super-utilisateur pour l'installation; j'ai des privilèges limités dans mon environnement de travail.
9 réponses
OpenOffice a un lecteur RTF. Vous pouvez utiliser python Pour script OpenOffice, voir ici pour plus d'informations .
vous pourriez probablement essayer d'utiliser le com-object magique sur Windows pour lire tout ce qui sent ms-binaire. Je ne recommande pas que si.
en fait analyser les données brutes ne sera probablement pas très difficile, voir cet exemple écrit .bat / QBasic.
DocFrac est un convertisseur libre open source entre RTF, HTML et text. Les plateformes Windows, Linux, ActiveX et DLL sont disponibles. il sera probablement assez facile de l'envelopper en python.
RTF::TEXT::Convertisseur - extension Perl pour convertir RTF en texte . (dans le cas où vous avez des problèmes avec DocFrac).
Official Rich Text Format (RTF) Spécifications , version 1.7, par Microsoft.
Bonne chance (avec les privilèges limités dans Votre environnement de travail).
j'ai travaillé sur une bibliothèque appelée Pyth, qui peut faire ceci:
http://pypi.python.org/pypi/pyth /
convertir un fichier RTF en plaintext ressemble à quelque chose comme ceci:
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 peut également générer des fichiers RTF, lire et écrire XHTML, générer des documents à partir de markup Python a la Nevow's stan, et a un support expérimental limité pour la sortie latex et pdf. Son soutien à la RTF est assez robuste -- nous l'utilisons en production pour lire des fichiers RTF générés par différentes versions de Word, OpenOffice, Mac TextEdit, EIOffice, et d'autres.
avez-vous vérifié pyrtf-ng ?
mise à jour: la fonctionnalité d'analyse est disponible si vous effectuez une vérification Subversion, mais je ne sais pas si elle est complète. (Regardez dans le module rtfng.parser.base
.)
voici un lien vers un script qui convertit rtf en texte en utilisant regex: Expression régulière pour extraire un texte d'une chaîne RTF
aussi, et lien mis à jour sur github: Github lien
PyRTF-ng 0.9.1 n'a analysé aucun de mes documents RTF, à la fois avec L'Exception Parsingex. Le premier document a été généré avec OpenOffice 3.4, le second avec Mac TextEdit.
Pyth 0.5.6 les deux documents ont été analysés sans problème, mais les symboles cyrilliques n'ont pas été traités correctement.
mais chaque éditeur ouvre le document de l'éditeur de l'autre correctement et sans problème, de sorte que toutes les bibliothèques semblent avoir un faible soutien de la rtf.
donc j'écris mon propre parser avec du blackjack et des putes.
(j'ai téléchargé les deux fichiers, donc vous pouvez vérifier vous-même les bibliothèques RTF: http://yadi.sk/d/RMHawVdSD8O9 http://yadi.sk/d/RmUaSe5tD8OD )
I just came across pyrtflib - il n'y a pas beaucoup de documentation (aucune) dessus, c'est un peu un cas de l'installer et d'utiliser ensuite la fonction d'aide intégrée() pour trouver ce qui est disponible et ce que tout fait.
ayant dit cela dans mon petit essai de sa rtf.Rtf2Html.getHtml() la fonction s'est bien passé. Je n'ai pas essayé la fonction Rtf2Txt mais étant donné la nature plus simple de convertir rtf en simple texte, ça devrait aller. attendre.
j'ai rencontré la même chose et j'ai essayé de la coder moi-même. Ce n'est pas si facile, mais voici ce que j'avais quand j'ai décidé d'opter pour une application en ligne de commande. Rubis, mais vous pouvez l'adapter à python très facilement. Il ya quelques déchets d'en-tête à nettoyer, mais vous pouvez voir plus ou moins l'idée.
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
inversement, si vous voulez écrire RTFs facilement à partir de Python, vous pouvez utiliser le module tiers rtflib . C'est un module assez nouveau et incomplet mais encore très puissant et utile. Ci-dessous est un exemple qui écrit "hello world" dans un texte riche à un RTF appelé helloworld.rtf. C'est un exemple très primitif, et le module peut également être utilisé pour ajouter des couleurs, des italiques, des tables, et bien d'autres aspects du texte riche aux fichiers RTF.
from rtflib import *
file = RTF("helloworld.rtf")
file.startfile()
file.addstrict()
file.addtext("hello world")
file.writeout()