Tukar XML kepada Teks: Keluarkan Kandungan Daripada Kepungan Tag
Ada satu jenis fail yang selalu muncul apabila anda membina korpus teks: eksport XML sesuatu yang benar-benar menarik — abstrak jurnal, transkrip mahkamah, arkib yang didigitalkan, sepuluh tahun catatan blog — tetapi prosa yang anda mahukan tertanam di bawah skema yang direka seseorang pada tahun 2006. Perkataannya memang ada di dalam. Cuma ia terbalut dalam tiga lapis tag yang siap dengan awalan namespace.
Halaman ini mengeluarkan kandungan itu dan memberikan anda teks semata-mata. Tiada tajuk, tiada
jadual, tiada markup langsung. Inilah yang anda perlukan apabila destinasinya ialah model embedding,
indeks carian, skrip NLP, atau mana-mana pipeline yang menganggap tanda baca sebagai hingar. Muat
naik fail .xml di atas — percuma, tanpa perlu mendaftar, had 50 MB, tiada apa-apa
disimpan.
Apa yang Keluar di Hujung Sana
Pengekstrakan bukan sekadar memadam semua yang ada antara < dan >.
Beberapa perkara perlu dikendalikan dengan betul, jika tidak outputnya rosak secara halus:
- Rujukan entiti dinyahkod. XML tidak boleh mengandungi ampersand terdedah, jadi
dokumen sebenar penuh dengan
&,<,"dan bentuk berangka seperti’untuk apostrof keriting. Jika dibiarkan, semua ini meracuni kiraan perkataan dan menggagalkan padanan carian. Ia dikembalikan sebagai aksara yang diwakilinya. - Seksyen CDATA dibuka balutannya.
<![CDATA[ ... ]]>ialah cara XML menyeludup kandungan yang mengandungi markup — HTML di dalam deskripsi RSS, cebisan SQL, blok JavaScript. Balutannya dibuang, kandungannya kekal. - Nod teks yang hanya berisi ruang kosong digugurkan. XML yang dicetak cantik ada nod teks antara setiap pasang tag yang mengandungi hanya baris baharu dan beberapa ruang. Kekalkan semuanya dan 60% output anda jadi baris kosong.
- Nama elemen hilang sepenuhnya. Tidak seperti versi Markdown, nama tag tidak dikekalkan sebagai label di sini. Anda dapat nilainya, bukan skemanya.
- Komen, deklarasi XML, DTD dan processing instruction dibuang. Tiada satu pun daripadanya kandungan.
Pepijat Perkataan Bercantum, dan Kenapa Ia Penting
Inilah mod kegagalan yang menjerat kebanyakan pembuangan tag yang naif, termasuk banyak penyelesaian regex segera yang orang salin dari forum. Ambil kandungan bercampur — teks dan elemen anak berselang-seli dalam parent yang sama:
<p>See the <ref>appendix</ref> for details</p>
Buang tag sambil lewa dan anda boleh berakhir dengan "See theappendixfor details", kerana tag yang anda buang itu sebenarnya berfungsi sebagai sempadan perkataan. Pergi ke arah bertentangan pula — sisipkan baris baharu pada setiap tag — dan ayat itu tercincang menjadi tiga serpihan merentas tiga baris. Kedua-duanya tidak boleh dipakai: yang pertama merosakkan tokenisasi, yang kedua merosakkan segmentasi ayat, dan kedua-duanya secara senyap mencemarkan apa sahaja di hilir yang menyangka ia sedang membaca prosa.
Pengendalian yang betul mengekalkan elemen inline sebagai inline dan hanya memutuskan baris pada sempadan blok yang sebenar. Kalau anda menggunakan alat lain untuk mengekstrak kandungan teks daripada fail XML, inilah perkara pertama yang perlu diuji — cari perenggan dengan tag inline di tengahnya dan pastikan ayatnya selamat.
Masalah Fail Konfigurasi
Sekarang kaveat yang jujur, sebab ia akan menjimatkan lima minit kekeliruan anda. XML menyimpan data di dua tempat: antara tag, dan dalam atribut di dalam tag itu sendiri. Pengekstrakan teks, mengikut takrifnya, mengambil jenis yang pertama. Ada XML yang sangat lazim hampir tiada langsung jenis itu.
Manifes Android, app.config .NET, fail build Ant, definisi bean Spring, kebanyakan
SVG — semuanya meletakkan hampir segala-galanya dalam atribut. Masukkan satu ke dalam pengekstrak
teks dan yang pulang cuma beberapa patah perkataan terbiar, atau fail kosong, dan nampak macam alat
itu gagal. Tidak; memang tiada teks elemen untuk dijumpai.
Untuk fail sebegitu, gunakan penukar XML kepada Markdown yang mengekalkan atribut bersama elemen yang dilayakkannya. Togol format di bahagian atas halaman ini bertukar terus dan membawa fail anda sekali, jadi cuma satu klik dan bukannya satu lagi muat naik. Peraturan mudahnya: prosa duduk dalam elemen, tetapan duduk dalam atribut. Pengekstrakan teks adalah untuk jenis yang pertama.
Bila Teks Rata Memang Pilihan yang Tepat
XML ialah format asal bagi jumlah teks terkurasi yang sangat besar, sebahagian besarnya kerana institusi menjadikannya piawai sebelum JSON wujud. Legasi itulah tempat penukar ini membuktikan gunanya:
- Membina korpus. Longgokan abstrak akademik, teks sastera berpengekodan TEI, rekod parlimen dan undang-undang, katalog muzium dan perpustakaan. Semuanya prosa yang kaya, semuanya terbalut skema yang berat. Anda mahukan prosanya.
- Embedding dan carian vektor. Embed cebisan XML mentah dan sebahagian nyata daripada vektor yang terhasil menggambarkan markup dan bukannya makna — dua dokumen tentang subjek yang tiada kaitan boleh terjatuh berdekatan semata-mata kerana berkongsi skema. Buang tagnya dan anda dapat embedding tentang kandungan.
- Chunking. Chunker bersaiz tetap menghiris XML mentah di tengah elemen dan menghasilkan serpihan dengan tag tergantung. Teks rata terpisah pada sempadan ayat dan perenggan — itulah yang chunker itu memang direka untuknya.
- Pengindeksan carian dan analisis teks. Frekuensi terma, penskoran sentimen, pemodelan topik, pengekstrakan entiti — semuanya terpesong oleh token struktur yang berulang pada setiap rekod.
- Jimat token. Kemeleretan XML luar biasa walaupun dalam kalangan format berstruktur, kerana setiap nama elemen ditulis dua kali. Membuang tag daripada eksport yang bersarang dalam menyingkirkan banyak token yang memang tidak pernah membawa maklumat. Pembilang di bawah output menunjukkan tepat berapa banyak.
Bila Membuang Tag Adalah Langkah yang Salah
Model mengendalikan XML mentah tanpa masalah — ia meleret tetapi tidak taksa, dan terdapat banyak sekali XML dalam data latihan. Menukar ialah keputusan yang anda buat atas sebab tertentu, bukan peraturan.
- Menulis kod terhadap dokumen itu. Kueri XPath, stylesheet XSLT, parser SAX atau DOM, sebuah skema. Semuanya memerlukan nama elemen yang tepat, awalan namespace dan perbezaan atribut/elemen yang terpelihara. Pengekstrakan teks membuang tepat perkara-perkara itu. Tampal serpihan fail yang sebenar.
- Hierarki itulah jawapannya. Kalau soalannya di bawah parent mana sesuatu itu berada — tetapan itu milik environment yang mana, klausa itu dalam seksyen yang mana — meratakannya memusnahkan jawapan itu. Itu kerja Markdown.
- Dokumen yang sarat atribut, seperti di atas.
Soalan Lazim
Bagaimana nak tukar fail XML kepada teks?
Letakkan fail .xml ke dalam penukar di atas dan kandungan antara tag dikembalikan sebagai prosa biasa — tiada kepungan tag, tiada awalan namespace, tiada atribut. Muat turun sebagai .txt. Percuma, tanpa mendaftar, 50 MB setiap fail, tiada apa-apa disimpan.
Adakah entiti seperti & dan < dinyahkod?
Ya, dan kesannya lebih besar daripada yang disangka. XML tidak boleh mengandungi ampersand terdedah, jadi dokumen dunia sebenar padat dengan &, <, " dan rujukan aksara berangka. Regex pembuang tag yang naif membiarkan semua itu terpampang secara literal dalam output. Penghuraian yang betul menyelesaikannya kembali kepada aksara yang diwakilinya.
Kenapa tidak buang sahaja semua yang ada antara kepungan tag dengan regex?
Kerana seksyen CDATA dan nilai atribut kedua-duanya mengandungi aksara yang kelihatan seperti markup padahal bukan. Regex akan dengan senang hati menelan kandungan blok <![CDATA[...]]> yang mengandungi HTML terbenam, dan ia tiada cara untuk membezakan tag sebenar daripada < yang muncul di dalam teks atribut berpetik. Penghuraian mendapat semua itu dengan betul; padanan corak tersilap secara senyap.
Adakah nilai atribut turut keluar?
Yang anda dapat ialah teks elemen; atribut ialah metadata tentang elemen itu, bukan kandungannya. Ini biasanya betul — anda mahukan abstraknya, bukan versi skemanya. Ia jadi masalah pada format yang menyimpan kandungan sebenar dalam atribut, jadi kalau output anda nampak nipis, buka fail sumber dan semak sama ada perkataan yang anda cari duduk di dalam <tag attr="...">.
Bolehkah ia digunakan pada suapan RSS dan sitemap?
Boleh — kedua-duanya XML dan kedua-duanya boleh ditukar. Suapan RSS memberikan anda tajuk, deskripsi dan tarikh sebagai teks yang boleh dibaca — cara pantas membina korpus daripada arkib blog. Sitemap pula memberikan senarai URL, yang lebih berguna disalurkan ke tempat lain daripada dibaca sebagai prosa.
Alat Berkaitan
Satu nota tentang XML yang anda temui secara tidak langsung: fail .docx dan
.epub sebenarnya XML yang dizipkan. Anda boleh membukanya dan menyuap markup dalaman
itu ke sini, tapi jangan — ia tepu dengan run penggayaan dan metadata semakan yang menenggelamkan
teks. Gunakan
Word kepada teks atau
EPUB kepada teks, yang tahu
bahagian mana kandungan. Untuk markup yang HTML dan bukannya XML, ada
HTML kepada teks, dan untuk
format data berstruktur besar yang satu lagi,
JSON kepada teks.
File2Txt menerima apa sahaja
yang disokong kalau anda tak mahu memilih halaman.
Dan apabila XML itu duduk di dalam repositori — fail POM, deskriptor build, fixture ujian — menukarnya bersendirian melucutkan konteksnya. Penukar GitHub kepada teks, penukar GitLab dan penukar direktori lokal membolehkan anda menarik XML itu bersama kod yang membacanya ke dalam satu output — hampir selalunya lebih berguna. Panduan menyediakan fail untuk LLM merangkumi kes umumnya.
Repo2Txt dibina dan diselenggara oleh v12hero, pembangun bebas yang membina aplikasi natif dan web yang mengutamakan privasi.