Есть ли модуль Python для преобразования RTF в обычный текст? - PullRequest
32 голосов
/ 27 августа 2009

В идеале я хотел бы, чтобы модуль или библиотека не устанавливали права суперпользователя для установки; У меня ограниченные привилегии в моей рабочей среде.

Ответы [ 9 ]

48 голосов
/ 30 ноября 2009

Я работал над библиотекой под названием Pyth, которая может сделать это:

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

Преобразование файла RTF в открытый текст выглядит примерно так:

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 также может генерировать RTF-файлы, читать и записывать XHTML, генерировать документы из разметки Python по принципу Невова и имеет ограниченную экспериментальную поддержку для вывода латекса и pdf. Его поддержка RTF довольно надежная - мы используем ее в производстве для чтения файлов RTF, созданных различными версиями Word, OpenOffice, Mac TextEdit, EIOffice и других.

8 голосов
/ 27 августа 2009

OpenOffice имеет читатель RTF. Вы можете использовать python для сценария OpenOffice, см. Здесь для получения дополнительной информации .

Возможно, вы могли бы попытаться использовать магический com-объект в Windows, чтобы прочитать все, что пахнет ms-бинарным. Я не рекомендовал бы это все же.

На самом деле синтаксический анализ необработанных данных, вероятно, не будет очень сложным, посмотрите этот пример , написанный на .bat / QBasic.

DocFrac - бесплатный конвертер с открытым исходным кодом между RTF, HTML и текстом. Доступны платформы Windows, Linux, ActiveX и DLL. Скорее всего, это будет легко обернуть в python.

RTF :: TEXT :: Converter - Расширение Perl для преобразования RTF в текст . (если у вас проблемы с DocFrac).

Официальный Rich Text Format (RTF) Технические характеристики , версия 1.7, от Microsoft.

Удачи (с ограниченными привилегиями в Вашей рабочей среде).

3 голосов
/ 27 августа 2009

Вы проверили pyrtf-ng ?

Обновление: Функция синтаксического анализа доступна, если вы выполняете проверку Subversion, но я не уверен, насколько она полнофункциональна. (Смотрите в модуле rtfng.parser.base.)

2 голосов
/ 28 июня 2016

Вот ссылка на скрипт, который преобразует RTF в текст с помощью регулярных выражений: Регулярное выражение для извлечения текста из строки RTF

Также и обновленная ссылка на github: Github ссылка

1 голос
/ 24 апреля 2015

Я только что натолкнулся на pyrtflib - на нем не так много (какой-либо) документации, это своего рода случай его установки, а затем использование встроенной функции help (), чтобы узнать, что доступно и что все делает .

Сказав, что в моем небольшом пробном запуске его функции rtf.Rtf2Html.getHtml () все прошло достаточно хорошо. Я не пробовал функцию Rtf2Txt, но, учитывая более простую природу преобразования rtf в открытый текст, он вполне может сработать, как я ожидал.

1 голос
/ 15 августа 2012

PyRTF-ng 0.9.1 не проанализировал ни один из моих документов RTF, оба с исключением ParsingException. Первый документ был сгенерирован с OpenOffice 3.4, второй с Mac TextEdit.

Pyth 0.5.6 без проблем проанализировал оба документа, но неправильно обработал символы кириллицы.

Но каждый редактор открывает документ редактора другого правильно и без проблем, поэтому кажется, что все библиотеки имеют слабую поддержку RTF.

Итак, я пишу свой собственный парсер с блэкджеком и проститутками.

(Я загрузил оба файла, поэтому вы можете самостоятельно проверить библиотеки RTF: http://yadi.sk/d/RMHawVdSD8O9 http://yadi.sk/d/RmUaSe5tD8OD)

1 голос
/ 27 августа 2009

Есть хорошая библиотека pyrtf-ng для универсальной обработки RTF.

0 голосов
/ 15 июня 2011

И наоборот, если вы хотите легко писать RTF из Python, вы можете использовать сторонний модуль rtflib . Это довольно новый и неполный модуль, но все же очень мощный и полезный. Ниже приведен пример, который записывает «hello world» в расширенный текст в RTF с именем helloworld.rtf. Это очень примитивный пример, и модуль также можно использовать для добавления цветов, курсива, таблиц и многих других аспектов расширенного текста в файлы RTF.

from rtflib import *
file = RTF("helloworld.rtf")
file.startfile()
file.addstrict()
file.addtext("hello world")
file.writeout()
0 голосов
/ 15 октября 2009

Я столкнулся с тем же самым, и я пытался сам его кодировать. Это не так просто, но вот что я получил, когда решил использовать приложение для командной строки. Это рубин, но вы можете легко адаптироваться к питону. Есть некоторый мусор заголовка для очистки, но вы можете увидеть более или менее идею.

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