web-dev-qa-db-fra.com

Y at-il un module Python pour la conversion RTF au texte brut?

Idéalement, j'aimerais un module ou une bibliothèque dont l'installation ne nécessite pas d'accès superutilisateur; J'ai des privilèges limités dans mon environnement de travail.

30
Tony

OpenOffice a un lecteur RTF. Vous pouvez utiliser python pour écrire un script OpenOffice, voir ici pour plus d'informations .

Vous pourriez probablement essayer d'utiliser le com-objet magique sous Windows pour lire tout ce qui sent le binaire. Je ne recommanderais pas cela cependant.

En réalité, analyser les données brutes ne sera probablement pas très difficile, voir cet exemple écrit en .bat/QBasic.

DocFrac est un convertisseur open source gratuit entre RTF, HTML et texte. Plateformes Windows, Linux, ActiveX et DLL disponibles. Il sera probablement assez facile de l’envelopper en python.

RTF :: TEXT :: Converter - Extension Perl permettant de convertir RTF en texte. (au cas où vous avez des problèmes avec DocFrac).

Format RTF officiel Spécifications , version 1.7, de Microsoft.

Bonne chance (avec les privilèges limités dans votre environnement de travail).

8
Paweł Polewicz

Je travaille sur une bibliothèque appelée Pyth, qui peut faire ceci:

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

La conversion d'un fichier RTF en texte brut ressemble à 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 du XHTML, générer des documents à partir du balisage Python selon la norme de Nevow et n’a qu'un support expérimental limité pour les sorties latex et pdf. Son support RTF est très robuste - nous l’utilisons en production pour lire les fichiers RTF générés par diverses versions de Word, OpenOffice, Mac TextEdit, EIOffice, etc.

47
Brendon

Avez-vous vérifié pyrtf-ng ?

Update: La fonctionnalité d'analyse syntaxique est disponible si vous effectuez une extraction Subversion, mais je ne suis pas sûr de la richesse de ses fonctionnalités. (Regardez dans le module rtfng.parser.base.)

3
Vinay Sajip

Je viens de tomber sur pyrtflib - il n'y a pas beaucoup de documentation dessus, c'est un peu le cas de l'installer puis d'utiliser la fonction help () intégrée pour savoir ce qui est disponible et ce que tout fait.

Cela dit, lors de ma petite course d’essai de sa fonction rtf.Rtf2Html.getHtml (), cela s’est bien passé. Je n'ai pas essayé la fonction Rtf2Txt, mais étant donné la nature plus simple de la conversion de RTF en texte clair, tout se passe normalement.

1
Blair

Il existe une bonne bibliothèque pyrtf-ng pour la gestion universelle RTF.

1
cleg

PyRTF-ng 0.9.1 n'a analysé aucun de mes documents RTF, à la fois avec ParsingException . Le premier document a été généré avec OpenOffice 3.4, le second avec Mac TextEdit.

Pyth 0.5.6 analysé sans problèmes les deux documents, mais n’a pas traité correctement les symboles cyrilliques.

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 support RTF faible.

J'écris donc mon propre analyseur avec le blackjack et les prostituées.

(J'ai téléchargé les deux fichiers afin que vous puissiez vérifier vous-même les bibliothèques RTF: http://yadi.sk/d/RMHawVdSD8O9http://yadi.sk/d/RmUaSe5tD8OD )

1
Konstantin Nikitin

J'ai rencontré la même chose et j'essayais de le coder moi-même. Ce n'est pas si facile, mais voici ce que j'avais quand j'ai décidé de choisir une application en ligne de commande. C'est Ruby mais vous pouvez vous adapter très facilement au python ..__ Il y a des en-têtes à 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
Josep Valls

Inversement, si vous souhaitez écrire facilement des RTF à partir de Python, vous pouvez utiliser le module tiers rtflib . C'est un module assez nouveau et incomplet mais toujours très puissant et utile. Voici un exemple qui écrit "hello world" en texte enrichi dans un RTF appelé helloworld.rtf. Il s'agit d'un exemple très primitif, et le module peut également être utilisé pour ajouter des couleurs, des italiques, des tableaux et de nombreux autres aspects du texte enrichi à des fichiers RTF.

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