В идеале, мне нужен модуль или библиотека, которая не требует доступа суперпользователя к установке; У меня ограниченные привилегии в моей рабочей среде.
Есть ли модуль Python для преобразования RTF в обычный текст?
Ответ 1
OpenOffice имеет считыватель RTF. Вы можете использовать python для script OpenOffice, см. Здесь для получения дополнительной информации.
Вероятно, вы можете попробовать использовать волшебный ком-объект в Windows для чтения всего, что пахнет ms-двоичным. Я бы не рекомендовал этого.
Фактически синтаксический анализ необработанных данных, вероятно, будет не очень сложным, см. этот пример, написанный на .bat/QBasic.
DocFrac - бесплатный конвертер с открытым исходным кодом между RTF, HTML и текстом. Доступны платформы Windows, Linux, ActiveX и DLL. Это, вероятно, будет довольно легко обернуть его в python.
RTF::TEXT::Converter - расширение Perl для преобразования RTF в текст. (в случае, если у вас возникли проблемы с DocFrac).
Официальный формат форматированного текста (RTF) Технические характеристики, версия 1.7, Microsoft.
Удачи (с ограниченными правами в рабочей среде).
Ответ 2
Я работаю над библиотекой под названием 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 a la Nevow stan и имеет ограниченную экспериментальную поддержку для выхода латекса и PDF. Поддержка RTF довольно надежная - мы используем ее в производстве для чтения RTF файлов, созданных различными версиями Word, OpenOffice, Mac TextEdit, EIOffice, и другие.
Ответ 3
Вы проверили pyrtf-ng?
Обновление: Функциональность синтаксического анализа доступна, если вы выполняете проверку Subversion, но я не уверен, насколько она полнофункциональна. (Посмотрите в модуле rtfng.parser.base
.)
Ответ 4
Здесь ссылка на script, которая преобразует rtf в текст с помощью regex: Регулярное выражение для извлечения текста из строки RTF
Также и обновленная ссылка на github: ссылка Github
Ответ 5
Существует хорошая библиотека pyrtf-ng для универсальной обработки RTF.
Ответ 6
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)
Ответ 7
Я просто наткнулся на pyrtflib - там не много (какой-либо) документации, это своего рода случай его установки, а затем использование встроенная функция help(), чтобы узнать, что доступно и что все делает.
Сказав, что в моей небольшой пробной версии его функции rtf.Rtf2Html.getHtml() она прошла достаточно хорошо. Я не пробовал функцию Rtf2Txt, но, учитывая более простой характер преобразования rtf в открытый текст, он должен делать все, что я ожидал.
Ответ 8
Я столкнулся с одним и тем же, и я пытался сам его закодировать. Это не так просто, но вот что я имел, когда решил пойти на приложение с командной строкой. Его рубин, но вы можете легко адаптироваться к python. Существует несколько мусора заголовка для очистки, но вы можете увидеть более или менее идею.
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
Ответ 9
И наоборот, если вы хотите легко писать RTF с Python, вы можете использовать сторонний модуль rtflib. Это довольно новый и незавершенный модуль, но все же очень мощный и полезный. Ниже приведен пример, который пишет "привет мир" в расширенном тексте в RTF под названием helloworld.rtf. Это очень примитивный пример, и модуль также можно использовать для добавления цветов, курсива, таблиц и многих других аспектов богатого текста в файлы RTF.
from rtflib import *
file = RTF("helloworld.rtf")
file.startfile()
file.addstrict()
file.addtext("hello world")
file.writeout()