Есть ли модуль Python для преобразования RTF в обычный текст?

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


person Tony    schedule 26.08.2009    source источник
comment
Вы можете установить пакеты Python с параметром easy_install и --user без разрешений.   -  person Martin Ueding    schedule 27.05.2012
comment
Этот ответ - лучший ... он работает для меня как шарм !!   -  person Anwarvic    schedule 17.01.2019


Ответы (10)


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

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

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

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

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

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

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

person Paweł Polewicz    schedule 26.08.2009
comment
Спасибо. Я открыл документ в OpenOffice и сохранил его как обычный текстовый файл. Это был, наверное, самый простой подход. И спасибо, что напомнили мне, что это Моя рабочая среда. Я попросил доступ к sudo. - person Tony; 28.08.2009
comment
Ссылка на RTF :: TEXT :: Converter не работает. Это ссылка на обсуждение в списке рассылки python. Поэтому ссылки-ответы не приветствуются ... - person GreenAsJade; 07.06.2015
comment
спасибо, что указали на это, я исправил одну из ссылок. К сожалению, другой пришлось удалить. - person Paweł Polewicz; 07.06.2015
comment
DocFrac по-прежнему работает, но не поддерживает специальные символы pt-br. - person Alan Tygel; 13.01.2019
comment
Спецификация Microsoft RTF теперь находится по адресу: download.microsoft.com/download/5/d/d/ - person Julian Mehnle; 02.09.2020

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

person Brendon    schedule 30.11.2009
comment
Жаль, что это несовместимо с Python 3 ;-( - person Epoc; 10.11.2016
comment
@Epoc, есть некоторая работа, чтобы сделать его совместимым с Python 3. У меня есть одна вилка в моем репо, которую вы можете установить с помощью pip install git+https://github.com/robertour/pyth@pyth-py3. Вы можете увидеть часть обсуждения здесь. - person toto_tico; 07.09.2017

Если вы используете Mac, вы можете преобразовать RTF файл file.rtf в TXT из CLI, например:

textutil -convert txt file.rtf
person Franco Piccolo    schedule 03.08.2019

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

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

person Vinay Sajip    schedule 26.08.2009

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

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

person ChrisE    schedule 28.06.2016

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

person cleg    schedule 26.08.2009
comment
Спасибо, но проблема с pyrtf-ng заключается в том, что он полезен для создания файлов RTF, а не для их анализа. Я загрузил его со страницы SourceForge (на вкладке «Загрузка» в Google Code ничего нет), и это единственная функция, которую я смог найти. - person Tony; 27.08.2009
comment
@tony, вы просмотрели код ? google.com/p/pyrtf-ng/source/browse/#svn/trunk/rtfng/? Если в проекте, размещенном на Google Code, еще нет загрузок, просмотрите источники! -) - person Alex Martelli; 27.08.2009

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)

person Konstantin Nikitin    schedule 15.08.2012
comment
ссылки мертвы, они еще остались? - person n611x007; 13.11.2014

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

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

person Blair    schedule 24.04.2015
comment
С тех пор попробовали функцию Rtf2Txt.getText (), и она работала нормально - мое использование не было исчерпывающим испытанием на пытки в крайних случаях, но все случаи, которые я тестировал, привели к тому, что он дал мне ожидаемый результат - person Blair; 11.05.2015

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

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
person Josep Valls    schedule 15.10.2009
comment
паскаль и питон ... В ЖЕ коде! - person Victor VosMottor; 12.10.2019

И наоборот, если вы хотите легко писать 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()
person codedude    schedule 15.06.2011