PDA

Visualizza versione completa : Mac Estrarre automaticamente testo da più files HTML



LadyHawke
09-07-12, 12: 33
Mi chiedevo se era possibile, magari con qualche script Automator, poter estrarre solo il testo da una serie di files HTML e salvarlo in un file unico (rtf, doc, odt) senza perdere la formattazione di base (a capo, paragrafi), oppure, in alternativa, fare almeno il "merge" automatico di una serie di files HTML per averne uno soltanto da ripulire poi a mano con un word processor

:bai

Andy86
09-07-12, 13: 36
:bai

In che linguaggio ti servirebbe lo script?

In bash c'è il sed che fa praticamente tutto da solo: Estrarre il testo da una pagina HTML - Raccolta di Script per la Shell - bash-script.b2com.org - Ubuntu - Debian - Bash Script (http://bash-script.b2com.org/articoli/estrarre-il-testo-da-pagina-html.php)

Poi per estendere l'utilizzo a più file ci sono i cicli for e while e si può leggere l'output di CD per applicarlo su una cartella. :sisi

LadyHawke
09-07-12, 14: 36
Per "script Automator" intendevo proprio Automator (http://it.wikipedia.org/wiki/Automator), che è una applicazione presente sul Mac che permette di creare piccole applicazioni in Applescript (http://it.wikipedia.org/wiki/AppleScript): rozzamente detto, come fosse una sorta di aggregatore di macro VB da combinare per ottenere piccole applicazioni.

Se non trovo altro modo, valuto ovviamente la possibilità della tua proposta decisamente interessante, tanto avevo già in mente di virtualizzare anche un Linux sul Mac (l'utilizzo del terminale Linux potrebbe avere problemi con una versione virtualizzata?); in questo senso avrei potuto anche cercare qualcosa per windows (virtualizzata anche quella sul Mac), ma se possibile volevo evitare la leggera seccatura di lavorare con due S.O. contemporaneamente perché specialmente quando sono fuori casa il display 13,3" non è il massimo :hap

:bai

[EDIT] avrei bisogno però di poter impostare più pagine HTML tutte insieme per la conversione, in genere circa una quindicina

Andy86
09-07-12, 14: 53
Capisco. Dalla home non si vedeva la Tag. :ghgh

Purtroppo quel linguaggio non lo conosco e non so che pacchetti ci sono su Mac, comunque i cicli for-while sono comuni a tutto, perciò se non c'è già qualcosa di automatizzato ecco che per eseguire più volte il comando su ogni file bisogna scrivere un ciclo. :sisi


(l'utilizzo del terminale Linux potrebbe avere problemi con una versione virtualizzata?);

Non credo, perché linux è il terminale, poi l'interfaccia grafica viene dopo, come un insieme di applicazioni eseguite sul terminale, un po' come faceva windows ai tempi del dos. :sisi

Comunque sentiamo Kaos.

LadyHawke
09-07-12, 16: 19
comunque i cicli for-while sono comuni a tutto, perciò se non c'è già qualcosa di automatizzato ecco che per eseguire più volte il comando su ogni file bisogna scrivere un ciclo. :sisi
Eh eh, eventualmente poi me lo spieghi in italiano :ghgh


credo, perché linux è il terminaleEcco :bsh, ti ho fatto la classica domanda imperdonabile, pur sapendolo bene (ed è la prima cosa che un linuxiano ti sbandiera orgogliosamente davanti), quindici anni di windows non riesco a buttarmeli alle spalle...

:bai

K.a.o.s.
10-07-12, 03: 44
Anch'io come Andy ho pensato subito a bash. Dopotutto il terminale di Linux è uguale a quello di Mac OS X (è bash). Cambiano un po' di cose con certi programmi, ma gli strumenti base sono gli stessi (sed etc. sono standard e quindi sono alla base anche di Os X). Però o si trova qualcosa di già fatto che funziona bene oppure tocca scriverselo da soli e la cosa al momento la trovo abbastanza noiosa :ghgh.

Inoltre se fatto da terminale, la cosa può risultare scomoda se non sei pratica.
Lo script linkato da andy ad esempio richiede che tu faccia un ls per passargli i file della cartella e bisogna sistemare il fatto che i nomi con spazi vengono interpretati male.

In ogni caso ti ho combinato uno script di Automator che fa tutto al volo quello che chiedi. Basta che ci trascini sopra la cartella o i file html puri (salvati come sorgenti) che devono essere ripuliti. Il problema è che ricarica le pagine, quindi richiede un po' di tempo in più e una connessione ad internet.
Lo trovi qui: https://www.dropbox.com/sh/pucxgspz5bhnbxe/Ciuz1L3Ohu

Quando è in esecuzione compare un ingranaggio rotante nella barra del sistema
http://i.imgur.com/KkmcA.png

Non credo, perché linux è il terminale, poi l'interfaccia grafica viene dopo, come un insieme di applicazioni eseguite sul terminale, un po' come faceva windows ai tempi del dos. :sisiIn alcuni casi è vero (applicazioni semplici in genere), in altri casi però non sono cose legate ai programmi per bash. Rallenterebbe troppo. Sono direttamente sfruttate le librerie di sistema o le syscall.

Andy86
10-07-12, 13: 07
:bai


i nomi con spazi vengono interpretati male.

Di solito bastano un bel paio di virgolette. :bgg2

Comunque da quel poco che avevo visto su automator non mi pareva proprio la sintassi del bash... :m:



eventualmente poi me lo spieghi in italiano http://www.collectiontricks.it/images/smilies/ghgh.gif

Qui ti avevo già fatto un piccolo esempio partendo da un tuo codice:

http://www.collectiontricks.it/forum/programmare-si-grazie/Ct3426-contatore-particolare-cella-excel.html

Comunque è un po' come la storia delle potenze. :bgg2
Invece di riscrivere all'infinito, semplicemene dici quante volte bisogna ripetere. :sisi

LadyHawke
10-07-12, 14: 52
@ K.a.o.s.

Purtroppo non mi funziona: trascino la cartella e non succede nulla.

I files sono HTML, non hanno cartella immagini ma non provengono dal web, mi spiego: spesso acquisto degli ebooks in formato epub o kindle (dipende chi fa più sconti :bgg2) ma voglio convertirli anche in PDF e vorrei evitare la conversione da Calibre che spesso da questi formati non è decisamente perfetta, perciò "spacchetto" l'epub (o il .azw convertito in epub) per ottenere gli html dai quali estrarre le immagini e il testo puro (te ne allego uno, https://dl.dropbox.com/u/5750857/part0004.html), e in genere è un file per capitolo.
Vorrei mettere anche le mani alle prime decine di epub che iniziai a fare convertendo la mia libreria cartacea (che feci solo in epub buttando i sorgenti), per riaggiustarli (all'epoca non ero abbastanza preparata :tong2), ma quelli li feci con Sigil e sono .xhtml

:bai

K.a.o.s.
10-07-12, 15: 55
@andy

Automator non è bash :eye
Serve per creare facilmente script, ma è anche un linguaggio completamente differente. Il terminale di Os X è bash, come su Linux, quindi può essere usato in maniera uguale :eye

E per gli spazi: lo so, era solo per dire che non funzionava out-of-the-box :hap

@lady
Stasera se riesco magari provo, ora sono fuori da cellulare. Ovviamente però quello che chiedi non è proprio facilissimo, ma vedo che si riesce a fare.

Andy86
10-07-12, 19: 42
quello che chiedi non è proprio facilissimo

E se gli creassimo un .command riuscirebbe a dargli in parametro file e cartelle in modo semplice senza usare il terminale?
Bash script sulla scrivania del mac - Nerdsopolis (http://www.nerdsopolis.net/wp/2012/03/05/bash-script-sulla-scrivania-del-mac/)

K.a.o.s.
10-07-12, 20: 35
E se gli creassimo un .command riuscirebbe a dargli in parametro file e cartelle in modo semplice senza usare il terminale?
In questo caso sì può fare anche in bash basandosi su /System/Library/Printers/Libraries/convert. In altri casi spesso è più veloce affidarsi ad Automator/Apple Script. Tipo quando si devono "comandare" le applicazioni.

@lady
Non sono esperto in Apple Script, prova con questo però: crea pdf da praticamente ogni file di testo. Non accetta la cartella, ma puoi trascinarci sopra tutti i file direttamente. Verranno creati dei file pdf corrispettivi. Ad esempio: il file testo1.txt diventerà un pdf di nome testo1.pdf.

https://www.dropbox.com/sh/p0duwwz7ytufq7a/NhrwVzcuwO


Purtroppo non mi funziona: trascino la cartella e non succede nulla.
Perché non erano appunto pagine web :hap.

LadyHawke
10-07-12, 22: 20
Ovviamente però quello che chiedi non è proprio facilissimo

:oo2 E che gusto c'è a chiedere cose facili? Io vi voglio attenti :ghgh
Comunque, o il mio Lion è stregato o qualcosa non va, perché pure questa app non produce niente, né dalle pagine HTML né da un semplice RTF: stà li a saltellare sulla dock e basta :furious

Comunque voglio avere il controllo del PDF che produco (il testo passerà da OpenOffice per modifiche e aggiustamenti), quindi non stò cercando un convertitore diretto ed è importante che di XX files ne venga prodotto automaticamente solo uno, altrimenti mi diventa un lavoro bestiale
Proverò a cercare anche qualcosa per windows anche se avrei preferito lavorare tutto su mac :boh

:bai

Andy86
10-07-12, 22: 29
Io vi voglio attenti :ghgh

Se conoscessi l'applescript, tempo permettendo, te lo avrei scritto io, bello che personalizzato. :sisi
Purtroppo mi posso offrire solo per il bash o per il java (con il quale, però, non ci fai uno script, ma proprio un'apps in .jar, che comunque è portabile.).

K.a.o.s.
11-07-12, 01: 34
Comunque, o il mio Lion è stregato o qualcosa non va, perché pure questa app non produce niente, né dalle pagine HTML né da un semplice RTF: stà li a saltellare sulla dock e basta :furiousTi posso assicurare che l'ho testata e la cosa è strana.

è importante che di XX files ne venga prodotto automaticamente solo uno, altrimenti mi diventa un lavoro bestiale
Li puoi unire dopo tranquillamente con varie cose.

Comunque io precisamente non ho ancora capito. Hai degli html che devono diventare un unico ma devono prima essere modificati :shock.


Purtroppo mi posso offrire solo per il bash o per il java (con il quale, però, non ci fai uno script, ma proprio un'apps in .jar, che comunque è portabile.).


Vai pure se hai voglia :ghgh, ma secondo me non è un lavoro tanto veloce. Il problema sarebbe poi magari farlo andare anche su Mac Os X, ma al massimo si installa il necessario.

PS: Io calibre quando l'ho usato per convertire da mobi a epub ha funzionato bene :)

LadyHawke
11-07-12, 12: 00
Ok riepilogo :sisi: ho una serie di HTML e XHTML (epub spacchettizzati) dei quali voglio unificare il testo in un solo file da aprire con Openoffice, dividere in capitoli, aggiustare di formattazione se occorre, aggiungere eventuali copertine e trame (sono pignola quando mi intesto di fare le cose per benino) e convertire sempre con OO in PDF

Le conversioni con Calibre non vengono sempre bene e l'epub è quello più difficoltoso da convertire: usavo uno script di Automator per convertire in RTF i brutti PDF creati dagli epub ma mi sono accorta che lascia degli "a capo" selvaggi e il testo dovrebbe comunque essere riaggiustato a mano, per cui ho pensato che la cosa migliore sarebbe stata poter prendere il testo ottimizzato dell'epub e, se l'estrazione fosse stata semplice, avrei avuto un file già praticamente perfetto sul quale fare solo poche modifiche.

Fra l'altro vorrei anche "riaggiustare" i primi epub che mi ero fatta (qualche decina) perchè non essendo pratica non avevo considerato alcune cose, e alla fine, sempre se avessi trovato un modo veloce per estrarre il testo, avrei fatto prima a rifarli completamente che modificarli con Sigil

:bai

K.a.o.s.
11-07-12, 17: 59
Prova a vedere se basta qualcosa tipo questo da terminale:


Only registered members can view code.

Crea un file di nome libro.txt che puoi aprire tranquillamente dopo.

LadyHawke
11-07-12, 23: 57
Questo sembrerebbe funzionare :thx: per una conferma definitiva dovrò fare una conversione e leggere un libro per verificare che non tralasci qualcosa come lo script di cui parlavo prima.
Inserisce diverse righe vuote non rilevate dalle impostazioni del paragrafo ma con un plugin per OO le posso sistemare in un attimo (con le espressioni regolari non so ancora lavorare granché ma dovrò cercarmi una guida :tong2)

Non chiedo spiegazioni sul contenuto :bgg2: il mio feeling con il codice iniziò inserendo paginate di DOS sul C64 per far saltare una pallina e finì cercando nel listato quella virgola e/o spazio omessi che me la tenevano lì incollata come la Linea Lagostina :lol:

:bai

K.a.o.s.
12-07-12, 00: 26
Non chiedo spiegazioni sul contenuto
In pratica semplicemente entra nella cartella, legge tutti i file *.*html, poi passa il contenuto a sed che elimina i tag html. Poi passo il tutto a grep -v che elimina le righe inserite, in particolare per evitare che textedit faccia casino aprendolo pensando che siano pagine web :eye.

Il tutto aggiunto al file libro.txt :hap.

Inserisce diverse righe vuote non rilevate dalle impostazioni del paragrafo ma con un plugin per OO le posso sistemare in un attimo Al massimo si può cercare di sistemare un po' il comando in modo che le elimini :eye.

Andy86
12-07-12, 00: 28
:bai


(con le espressioni regolari non so ancora lavorare granché ma dovrò cercarmi una guida :tong2)


L'espressione regolare per individuare le righe vuote con openoffice è ^$, però riconosce solo i cf+cr (stile windows), quindi se per caso sono solo cf o solo cr dovrai prima convertirle con qualcosa d'altro.

Oppure eventualmente proviamo a far fare il lavoro a sed... :m:



Only registered members can view code.

Vedi se con questa piccola aggiunta ti va bene. Occhio che così le righe vuote le rimuove tutte, ma proprio tutte. :sisi

LadyHawke
12-07-12, 22: 40
No, invece non le toglie proprio tutte, ne lascia una ad intervalli quasi regolari per cui mi fa pensare ad una originaria interruzione di pagina o numero di pagina che all'origine avevo tolto, probabilmente causando un doppio "a capo". Quindi se questo /^$/ indica l'operazione su un "a capo", dove ne trova due, uno probabilmente lo lascia :m:; comunque non preoccuparti :hap perché come dicevo, ho un plugin che elimina le righe vuote.

Vi ringrazio molto per la disponibilità e per la vostra competenza

:bai

Andy86
12-07-12, 23: 20
Quindi se questo /^$/ indica l'operazione su un "a capo", dove ne trova due, uno probabilmente lo lascia :m:

Impossibile. Quel codice non controlla quanti a capo ci sono, li toglie mano mano che li trova, neanche si accorge se sono due. :sisi

È più probabile che alcuni "a capo" non siano standard, tra linefeed, returcarriage, pagefeed, verticaltab, ecc... probabilmente in quelle righe c'è qualcosa che non corrisponde al paragrafo vuoto ma che viene visto come "stacco". :m: