Eksportuję zawartość MS Word do zwykłego tekstu do użytku z narzędziami tekstowymi i do plików. Mam ograniczenie, w którym funkcja numeracji linii została włączona w oprogramowaniu MS, a wszelkie odniesienia do numerów linii na końcowym wyjściu muszą pasować do tej numeracji. Więc wpisz „linie numeracyjne”:
( Poe, EA )
Oczywiście w przypadku programu Word tego rodzaju numeracja nie przerywa linii na nowej linii , ale przerywa „linie” po odpowiednim marginesie (lub czymś innym). docx2txt
Wygląda na to, że skrypt domyślnie nie bierze tego pod uwagę i przerywa wiersze na nowej linii. Więc jeśli używam grep -n
z numeracją, linie nie będą pasować do funkcji numerów linii źródłowych, jak pokazano powyżej. Z dokumentacji nie wynika jasno, jak musiałbym edytować skrypt Perla, aby przekonwertować pliki tak, jak muszę w tym przypadku:
our $config_newLine = "\n"; # Alternative is "\r\n".
our $config_lineWidth = 80; # Line width, used for short line justification.
Próbowałem zastępując \n
na \r\n
ale to nie wydają się działać dla mnie. Dlatego postanowiłem wyeksportować dokumenty bezpośrednio z Worda z następującymi ustawieniami (zapisz jako zwykły tekst , w wersji 203,33pc):
- Unicode (UTF-8)
- Wstawianie podziałów linii + linii końcowych za pomocą (CR / LF)
- Zezwalaj na zastępowanie postaci
A teraz, kiedy rzeczywiście korzystać z .txt
plików nie jest idealne dopasowanie pomiędzy numerami linii w funkcji numerowania źródło i grep -n
wyjście.
- Czy jest jakaś konkretna konfiguracja / proces, o którym powinienem wiedzieć,
docx2txt
lub podobne narzędzie wiersza poleceń, które pozwoliłoby mi przekonwertować pliki .docx na zwykły tekst, zachowując podziały wierszy, bez uciekania się do programu Word tak jak ja? - Jakie są najlepsze praktyki , jeśli takie istnieją, do eksportowania dokumentów MS Word (które mogą zawierać znaki akcentowane) do zwykłego tekstu do użytku z narzędziami do plików / tekstu, w odniesieniu do podziałów linii i formatowania; i czy są jakieś negatywne konsekwencje dla ustawień, które wybrałem do eksportu, tj. wstawienia CR / LF?
Próba
Zgodnie z sugestią podam próbkę. W tym rar archiwum , ja dołączone do .docx plik z prostych punktach, a jej eksportowane .txt plik za pomocą programu Word z wymienionych powyżej opcji. Ten ostatni można porównać z domyślnym uruchomieniem docx2txt
pliku źródłowego.
źródło
Odpowiedzi:
docx2txt
działa na informacje wdocx
pliku, który jest skompresowanym zestawem plików XML.Jeśli chodzi o zawijanie wierszy,
.docx
dane XML zawierają tylko informacje o akapitach i przerwach, a nie o przerwach. Łagodne przerwy są wynikiem renderowania tekstu w określonej czcionce, rozmiarze czcionki i szerokości strony.docx2txt
zwykle próbuje dopasować tekst do 80 kolumn (80 kolumn można konfigurować), bez względu na czcionkę i rozmiar czcionki. Jeśli.docx
zawierasz informacje o czcionce z systemu Windows, który nie jest dostępny w systemach Unix / Linux, wykonanie eksportu do.txt
Open / LibreOffice również nie zapewniłoby tego samego układu, chociaż próbuje zrobić dobrą robotę¹.Tak więc
docx2txt
ani żadne inne narzędzie wiersza poleceń, w tym oparte na wierszu poleceń przetwarzanie Open / LibreOffice, nie gwarantuje konwersji tekstu do tego samego układu, co eksportowanie z programu Word².Jeśli chcesz (lub wymuszają to wymagania klienta), aby renderować dokładnie tak, jak robi to Word, z mojego doświadczenia wynika, że jest tylko jeden sposób: pozwól Wordowi wykonać renderowanie. Kiedy napotkałem podobny problem jak twój3 i miałem niezgodne wyniki przy użyciu innych narzędzi, w tym OpenOffice, wróciłem do instalowania maszyny wirtualnej z systemem Windows na serwerze Linux-a. Na klienckiej maszynie wirtualnej program obserwuje przychodzące pliki do przekonwertowania na hoście, które uruchamiają program Word i wykonują konwersję, a następnie kopiują wynik back.
Decyzje dotyczące używania tylko CR / LF lub LF, UTF-8 lub innego kodowania w
.txt
dużej mierze zależą od sposobu wykorzystania plików wynikowych. Jeśli pliki wynikowe są używane w systemie Windows, zdecydowanie wybrałbym CR / LF, UTF-8 i BOM UTF-8 . Współczesne programy w systemie Linux są w stanie wywnioskować, że plik ma format UTF-8, ale nie blokują specyfikacji materiałowej i / lub wykorzystują te informacje. Powinieneś przetestować wszystkie aplikacje docelowe pod kątem zgodności, jeśli są one znane z góry.¹ Ten rodzaj niezgodności jest głównym powodem, dla którego niektórzy moi znajomi nie mogą przejść na system Linux z systemu Windows, chociaż chcieliby. Muszą używać MicroSoft Word, ponieważ Open / LibreOffice co jakiś czas zmienia teksty wymieniane z klientami.
² Możesz zainstalować wszystkie czcionki używane w plikach Word i czasami mieć szczęście do niektórych tekstów.
³ Renderowanie plików PDF z
.doc/.docx
⁴ Program korzysta z automatyzacji GUI - tak jakby ktoś klikał jego menu - i nie próbuje prowadzić programu Word za pomocą interfejsu API. Jestem całkiem pewien, że to drugie da się zrobić i miałbym tę zaletę, że nie zepsuje rzeczy, jeśli Word zostanie zaktualizowany
źródło
vim
i mogłem zobaczyć, że naprawdę chodzi o xml - powinienem przyjrzeć się temu. Nie myślałem o czcionkach, a może nawet dzieleniu wyrazów. Również podczas niektórych operacji otrzymałem wiadomość od edytora tekstu narzekań na BOM, więc przeczytam link (ponieważ nie miałem pojęcia, co to było). Zaskoczyło mnie twoje rozwiązanie VM! Jestem nieco zaznajomiony z automatyzacją GUI - widziałem, że była używana do budowy stacji roboczej po replikacji obrazu podstawowego; nie myślałem o tym ...grep
; jeśli linie są długie, zmniejsza to „precyzję” na wyjściu. Sądzę, że ograniczenia różnią się w zależności od charakteru treści i sposobu jej wykorzystania. Z drugiej strony takie pytania nie byłyby, gdyby dokumenty nie opierały się tutaj na funkcji numeracji słów. Tworzenie frameworku dokumentów w celu objęcia starszych materiałów to poważna sprawa. Twoje zdrowie!