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.

30
demandé sur Tony 2009-08-27 00:56:59

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).

8
répondu Paweł Polewicz 2015-06-07 19:25:19

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.

47
répondu Brendon 2010-02-22 00:18:18

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 .)

3
répondu Vinay Sajip 2009-08-26 21:36:11

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

2
répondu ChrisE 2017-05-23 12:34:42

Il est bon de bibliothèque pyrtf-ng pour les RTF de manutention.

1
répondu cleg 2009-08-26 21:01:33

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 )

1
répondu Konstantin Nikitin 2014-11-13 15:14:54

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.

1
répondu Blair 2015-04-24 08:24:15

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
0
répondu Josep Valls 2009-10-15 17:22:44

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()
0
répondu codedude 2011-06-15 05:55:50