RTF naar tekst: verwijder de controlewoorden, behoud de woorden
Veel mensen ontdekken RTF op de harde manier. Je hebt een map met .rtf bestanden, je hebt de
inhoud in een database, en aangezien het formaat technisch gezien gewoon ASCII is, denk je dat je het bestand gewoon kunt lezen
en klaar zijn. Dan kijk je naar wat je hebt geladen en dat is het {\rtf1\ansi\deff0{\fonttbl{\f0\froman Times
New Roman;}}{\colortbl;\red0\green0\blue0;}\viewkind4\uc1\pard\f0\fs24 Dear Sir,\par en ongeveer vier
kilobytes daarvan vóór de tweede zin van de brief.
RTF is tekst, maar het is tekst met een opmaaktaal eromheen, en het eruit halen van de woorden betekent het feitelijk ontleden van de controlewoorden in plaats van hopelijk regexen bij backslashes. Dat is wat dit doet. Extraheer tekst uit een RTF-bestand en je krijgt het proza in leesvolgorde en niets anders. Gratis, geen aanmelding, limiet van 50 MB, niets opgeslagen aan onze kant.
Waarom naïef strippen fout gaat
Het is verleidelijk om een functie van twintig regels te schrijven die alles verwijdert dat met een backslash begint. Het werkt door de eerste drie bestanden en verpest dan stilletjes de rest. De specifieke manieren waarop het breekt, zijn zelfs de moeite waard om te weten als je die functie nooit schrijft, omdat het dezelfde dingen zijn die een echte parser moet afhandelen:
- De headergroepen zijn geen inhoud. De lettertypetabel, kleurentabel, stylesheet en revisietabellen staan allemaal bovenaan het bestand, tussen accolades. Verwijder de controlewoorden, maar houd de tekst binnen die groepen en uw uitvoer begint met een lijst met lettertypenamen.
- Bretels hebben betekenis. Groepen nesten en bereikopmaak. Sommige groepen —
\*\generator,\info, ingebedde objectgegevens — moeten in hun geheel worden weggegooid, niet uitgepakt. - Ontsnappingen zien eruit als inhoud.
\'92is een echt karakter, geen controlewoord verwijderen. Verwijder het en elke apostrof in het document verdwijnt midden in het woord. - Binair verbergt zich binnenin. Beelden leven erin
\pictgroepen als lange reeksen van hex cijfers die er precies zo uitzien als gewone tekst naar een dom filter. Zo kom je op 40.000 uit karakters van0100090000midden in een brief. - Paragraafmarkeringen zijn belangrijk.
\parmoet een regeleinde worden, niet niets, of het hele document arriveert als één enorme doorlopende alinea.
Waar RTF in bulk opduikt
Niemand heeft drie RTF-bestanden. Mensen hebben er drieduizend, omdat een of ander systeem ze heeft uitgestoten gestaag sinds 2004. De gebruikelijke verdachten:
- Juridische ontdekking en dossiers. Afschriften, documenten en correspondentie geëxporteerd vanuit casemanagementsystemen, vaak in één platte directory met cryptische bestandsnamen.
- Klinische documentatie. Gedicteerde aantekeningen, ontslagsamenvattingen en verwijsbrieven opgeslagen als RTF-blobs in EPD-tabellen – meestal omdat de leverancier het in 2003 heeft uitgekozen en niets dat heeft gedaan dwong sindsdien een verandering af.
- Registratiegegevens. Gekozen om dezelfde reden waarom de rechtbanken ervoor kozen: een open, stabiele spec die over dertig jaar nog steeds open zal zijn.
- Oude e-mailarchieven. De rich text-modus van Outlook is RTF-onderhuids, dus het valt erbuiten MSG-e-mailextractie voortdurend.
- Exporteren van verouderde applicaties. Elke CRM-, helpdesk- of line-of-business-tool met een het rich-text-veld van vóór het webeditor-tijdperk slaat vrijwel zeker RTF op in een kolom.
- WordPad-documenten. Tientallen jaren van informele aantekeningen en procedures bewaard door mensen die er gebruik van maakten welk Windows dan ook standaard wordt geopend.
De rode draad: dit zijn archieven waarin u wilt zoeken, indexeren of vragen wilt stellen – en dat is precies waar de platte tekst van de taak voor is.
Coderen is het deel dat echt bijt
De meeste RTF-problemen in het wild zijn karaktercoderingsproblemen, geen structurele problemen. Het formaat is ontworpen voordat Unicode werd geregeld, en oudere bestanden dragen die geschiedenis in zich.
De header declareert een codepagina - \ansicpg1252 voor Windows West-Europees is de meest voorkomende,
maar je zult elkaar ontmoeten \ansicpg1251 voor Cyrillisch, \ansicpg1250 voor Midden-Europa, en
\mac voor bestanden die hun leven begonnen op een klassieke Macintosh. Niet-ASCII-tekens verschijnen dan als
hex ontsnapt als \'92 of \'e9, waarvan de betekenis daar volledig van afhangt
verklaring. Als je het verkeerd doet, wordt é een Cyrillische letter, of wordt een gekrulde apostrof een kader.
Nieuwere bestanden gebruiken \uN? — een Unicode-codepunt gevolgd door een fallback-teken, ook voor lezers
oud om ermee om te gaan. Als je het goed analyseert, krijg je het echte karakter; onzorgvuldig ontleed krijg je de fallback, die
is vaak een letterlijk vraagteken. Dat is de oorsprong van documenten waarin elk em-streepje en slimme quote voorkomt
veranderd in ?.
Dus: voordat je een batch aan een database commit, open twee of drie geconverteerde bestanden en kijk er specifiek naar apostrofs, aanhalingstekens, streepjes en namen met accenten. Deze vier dingen vertellen je of de codering werd correct gelezen. Als ze het bij het verkeerde eind hebben, hebben ze het consequent bij het verkeerde eind, en is er sprake van zoeken en vervangen de batch repareert het in één keer.
Sms of Markdown? De beslissende vraag
Het komt erop neer of het document tabellen bevat die u belangrijk vindt.
RTF-tabellen worden expliciet gedefinieerd met \trowd en \cellx, dus reconstrueren ze
netjes in pijptabellen verwerken als u om Markdown vraagt. Maak ze plat tot tekst en de waarden overleven allemaal, behalve de
kolom waartoe elke kolom behoort niet - een facturatietabel wordt een reeks getallen gescheiden door witruimte,
en geen enkele vraag krijgt de kolommen terug. Als dat uw document is, gebruik dan
RTF naar Markdown. De formaatschakelaar
bovenaan deze pagina schakelt over en behoudt het bestand dat u al hebt geselecteerd.
Voor al het andere: brieven, aantekeningen, transcripties, memo's, correspondentie, het meeste van wat RTF feitelijk wordt gebruikt
voor — tekst is de betere uitvoer. Dat is wat full-text zoekindexen willen, wat inbeddingspijplijnen in stukken snijden
standaard, wat grep leest, en wat een classificator verwacht. De sterretjes en leidingen van Markdown zouden dat wel doen
wees gewoon karakters die je bij de volgende stap weer verwijdert.
Een grote batch verwerken
- Zip de map. ZIP naar tekst converteert elk ondersteund bestand in een archief in één keer, wat een stuk beter is dan ze te uploaden één voor één. Houd rekening met het plafond van 50 MB: RTF is niet gecomprimeerd en bestanden met ingesloten afbeeldingen zijn veel groter dan hun aantal woorden doet vermoeden.
- Proef voordat u zich vastlegt. Converteer eerst vijf bestanden uit verschillende jaren. Codering problemen clusteren per tijdperk en per tool die ze heeft geproduceerd, en een voorbeeld zal je het patroon laten zien voordat je er drieduizend verwerkt.
- Bewaar bestandsnamen als metagegevens. Als het eenmaal platte tekst is, is de bestandsnaam mogelijk de enige herkomst die u nog heeft. Bewaar het naast elke record.
- Verwacht een boilerplate. Briefhoofden, voetteksten en standaardafsluitingen worden overal herhaald bestand in een corpus. Ze worden vals frequente woordenschat in elke frequentie- of onderwerpanalyse, dus strip ze zodra je het patroon ziet.
- Let op afkorting. Veel tools zenden enigszins niet-conforme RTF uit met ongebalanceerde beugels. Als een geconverteerd bestand halverwege de zin stopt, is de bronvorm onjuist en niet de conversie stilletjes mislukt: open het origineel in een teksteditor en je zult meestal zien waar het fout gaat.
- Controleer het aantal tokens. De teller onder de uitvoer vertelt u wat een document kost voordat u het ergens plakt, wat handig is als u besluit hoeveel van een archief er in één past snel.
RTF, DOCX en welke u moet converteren
Als een document als beide bestaat, neem dan de DOCX. Het heeft een goede stijlhiërarchie en een rijkere semantiek Van woord naar tekst is het modernere equivalent van deze pagina.
Maar RTF heeft één echt voordeel voor het extraheren van bulktekst, en dat is geen nostalgie: het is een enkele lineaire tekst stream zonder compressielaag. Geen zip-container die beschadigd kan worden, geen XML-onderdelen die naar elkaar verwijzen. Als er iets misgaat, kun je het bestand in elke editor openen en de oorzaak met eigen ogen lezen. Bij een paar duizend bestanden van onbekende herkomst is die voorspelbaarheid verrassend veel waard.
Veelgestelde vragen
Hoe extraheer ik tekst uit een RTF-bestand?
Laat de vallen .rtf in de bovenstaande converter. De controlewoorden worden correct geparseerd en u krijgt het proza in leesvolgorde zonder enige opmaak. Gratis, geen aanmelding, 50 MB per bestand, niets opgeslagen. Downloaden als .txt of kopieer het uit.
Waarom kan ik de RTF niet gewoon in een teksteditor openen?
Dat kan, en je zult het zien {\rtf1\ansi\deff0{\fonttbl{\f0\froman Times New Roman;}} gevolgd door nog enkele kilobytes vóór de tweede zin van de brief. RTF is ASCII, maar het is ASCII verpakt in een opmaaktaal. De woorden staan erin, afgewisseld met lettertypetabellen, kleurentabellen en controlewoorden die moeten worden ontleed in plaats van dat ze in patronen moeten worden gematcht.
Waarom levert het zelf strippen van backslashes een gebroken uitvoer op?
Omdat controlewoorden niet op uniforme wijze zijn afgebakend en sommige gegevens bevatten, moet u deze bewaren. Een regex die alles verwijdert na een backslash, verwijdert ook \'e9, en dat is hoe RTF een teken met een accent codeert, zodat elke naam met een diakritisch teken stilletjes letters verliest. Het werkt op de eerste drie bestanden en verpest stilletjes de rest.
Blijven karakters met accenten en niet-Engelse karakters bestaan?
Ja, wanneer het bestand de codering correct aangeeft, wat de meeste doen. RTF ontsnapt aan niet-ASCII-tekens als hexadecimale reeksen die aan een gedeclareerde codepagina zijn gekoppeld, en door een goede parsering worden ze teruggezet naar echte Unicode. Dit is de meest voorkomende fout bij handgewalst strippen, en de fout die de meeste schade aanricht aan een gegevensset met namen of adressen.
Worden tabellen in een RTF-document geconverteerd?
De celinhoud komt door, maar als lopende tekst in plaats van als een raster: gewone tekst kan op geen enkele manier een kolom uitdrukken. Als het document een rapport is dat rond tabellen is opgebouwd, RTF naar Markdown behoudt in plaats daarvan de rijen en kolommen als pipe-tabellen.
De rest van de gereedschapskist
RTF is een van de dertien ondersteunde formaten. File2Txt behandelt ze allemaal vanuit a enkele upload als u liever geen pagina kiest. In de buurt: PDF naar tekst voor vaste lay-out documenten, EPUB naar tekst voor e-boeken, HTML naar tekst voor opgeslagen pagina's, en XML naar tekst voor het andere soort verouderd uitwisselingsformaat.
Werken met code of het live web? Daar is de GitHub opslagplaats naar tekstconverter, een GitLab versie, een lokale mapconverter, en Web2Txt voor het schrapen van URL's. De gids voor het voorbereiden van documenten voor LLM's omvat de algemene versie hiervan.
Repo2Txt is gebouwd en onderhouden door v12hero, een onafhankelijke ontwikkelaar die native- en web-apps bouwt die privacy voorop stellen.