Notepad ++: c'è qualche componente aggiuntivo o regex o macro per dividere il testo lungo al confine della frase


0

Sto facendo un lavoro di traduzione che mi ha richiesto di spezzare lunghe pagine o paragrafi al limite della frase, ovvero un punto fermo (.) Per l'inglese e Poorn-Viraam (।) per l'hindi.

Si chiama "allinea" o (probabilmente) tokenizzazione.

Per Notepad ++ (w9-32 bit), c'è qualche componente aggiuntivo o regex o macro per dividere il testo lungo in frasi. (in file txt di testo normale).,

In regex, non riesco proprio a trovare. e sostituirlo con. \ r \ n perché. è anche usato come indicazione di abbreviazione, per esempio in pvt. Inoltre, se ci sono diverse frasi tra parentesi () [] {}, anche queste non dovrebbero essere spezzate.

Quindi, immagino che un singolo comando regex non funzioni, o diventerà troppo complesso per prendersi cura di tutte le possibilità.

deve essere un insieme di regex eseguito uno dopo l'altro, o una macro,

o se qualcuno ha sviluppato un componente aggiuntivo per questo?

Grazie.

Rawat


oops! w9-32 bit -> w8-32 bit. spiacente.
VSRawat,

1
Stai cercando di gestire le lingue naturali. Senza informazioni semantiche come specificheresti la fine di una frase? Senza la semantica che sai che i.e.è una scorciatoia, come farebbe a sapere che non è la fine della frase? Potresti essere in grado di scrivere una regex che ignora i segni se la parola prima ha una lunghezza di carattere "comune" (3?) Per un'abbreviazione. Non sarà perfetto ma potrebbe aiutarti?
Seth,

Per favore, lascia un commento durante il downvoting ... Mi sembra una domanda valida ...
Wouter,

Risposte:


1

Come Seth ha spiegato, per fare davvero questo in modo propper, richiederebbe l'analisi del linguaggio naturale. Per ora, questo è disponibile solo attraverso implementazioni specializzate come il parser Stanford , ma non come plugin Notepad ++. Ma, date alcune ipotesi di base, penso che potresti aggirare il problema usando semplici espressioni regex.

Vorrei iniziare assumendo che le frasi che si desidera dividere terminino con un '.', Quindi abbiano uno spazio e quindi una lettera maiuscola. Questo non sarà perfetto, ma nella maggior parte dei casi evita il problema tra parentesi e abbreviazioni .

Così...

\. [A-Z]

E forse, se le frasi iniziano con un numero ...

\. [A-Z\d]

Quindi, forse per renderlo un po 'più resistente agli spazi bianchi e gestire le parentesi ancora meglio:

\.[^)\]}]*?\s+[^)\]}]*?[A-Z\d]
  • \ s + - per abbinare uno o più caratteri spazi bianchi
  • [^)]}] *? per assicurarsi che non vi sia alcuna parentesi di chiusura dietro il., o lo spazio bianco

Immagino che puoi giocarci un po 'di più a seconda del tuo caso d'uso ...

Modifica:
stavo riflettendo ancora un po 'su questo. Penso che potresti anche supporre che mentre una frase può iniziare con una sola lettera (come la parola "I" o "A"), è improbabile che finisca con una parola di una lettera (in inglese).

Quindi potresti usare

[a-zA-Z]{2}\.[^)\]}]*?\s+[^)\]}]*?[A-Z\d]

Come strategia generale, si tratta solo di guardare indietro e in avanti per cose che fai o non ti aspetti di trovare alla fine o all'inizio di una frase.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.