В идеале мне нужен модуль или библиотека, для установки которых не требуется доступ суперпользователя; У меня ограниченные привилегии в моей рабочей среде.
Есть ли модуль Python для преобразования RTF в обычный текст?
Ответы (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.
Удачи (с ограниченными привилегиями в Вашей рабочей среде).
Я работал над библиотекой 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 и другими.
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
Вы пробовали pyrtf-ng?
Обновление: функция синтаксического анализа доступна при проверке Subversion, но я не уверен, насколько она полнофункциональна. (Посмотрите модуль rtfng.parser.base
.)
Вот ссылка на сценарий, который преобразует RTF в текст с помощью регулярного выражения: Регулярное выражение для извлечения текста из строки RTF
Также обновленная ссылка на github: ссылка на Github
Существует хорошая библиотека pyrtf-ng для универсальной обработки RTF.
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)
Я только что наткнулся на pyrtflib - по нему не так много (какой-либо) документации, это своего рода случай установки это, а затем с помощью встроенной функции help (), чтобы узнать, что доступно и что все делает.
Сказав, что в моем небольшом пробном запуске его функции rtf.Rtf2Html.getHtml () все прошло достаточно хорошо. Я не пробовал функцию Rtf2Txt, но, учитывая более простой характер преобразования rtf в открытый текст, я ожидал, что она будет работать нормально.
Я столкнулся с тем же самым, и я сам пытался это кодировать. Это не так просто, но вот что у меня было, когда я решил использовать приложение командной строки. Его рубиновый, но вы можете очень легко адаптироваться к питону. Нужно убрать мусор из заголовков, но идея более или менее понятна.
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
И наоборот, если вы хотите легко писать 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()
easy_install
и--user
без разрешений. - person Martin Ueding   schedule 27.05.2012