/ / Filtro RegEx per parole comuni - regex, python-3.x

Filtro RegEx per parole comuni - regex, python-3.x

Sto cercando di rimuovere le parole comuni (congiunzioni,avverbi, pronomi, ecc.) da un blocco di testo. Sto usando un regex ma per qualche ragione, alcune delle parole comuni che sono nel mio filtro non vengono filtrate.

Alcuni esempi di parole non filtrate: "havent", "why", "should"

Qualche idea, perché?

 splitResult = s.split()
p = re.compile(
"""^(&|also|a|about|again|all|after|are(nt)?|arent|as|an(y)?|at|
bcuz|before|be(low)?|between|bring|but|by|and|can(not)?|close(d)?|could(nt)?|
cuz|do(nt)?|down|decide(d)?|decision|on(to)?|or|of|our|over|out|have(nt)?|he(re)?|
her|his|other(s)?|even|got(ten)?|for|from|get(s)?|got(ten)?|has(nt)?|havent|he(s)?|
him|his|if|in|to|in(to)?|is(nt)?||make|me|once|play(ed)?|role|say(s)?|seen|she(s)?|
should(nt)?|stop(ped)?|time|my|no(t)?|must(nt)?|now|you(re)?|your|want|want(ed)?|
watch(ed)?|way|we(re)?|will|with||i|a|is(nt)?|just|would(nt)?|before|that|the(re)?|
their|them|they|this|turn|when|at|how|it(s)?|which|who|after|then|if|how|because|know(s)?|
yet|[A-Za-z]{1,2}|http(s)?://.*|www..*)$""",re.I)

for word in splitResult:
m = p.findall(word)
if not m:
word = "".join(c for c in word if c not in ("?", ".", "!", """, ",",""","(",")"))
wordsList.insert(ctr,word)

risposte:

0 per risposta № 1

Sembra che il tuo modello sia diventato così grande da non riuscire a gestirlo.

Il modello non corrisponde quando ci sono spazi bianchi o apostrofi circostanti.

Non c'è ragione havent e should non riuscirà a filtrare, altrimenti. Senza più codice, nessuno lo sa.

(Quanto segue è un bug in regex101.com, ma dovresti comunque correggere il tuo regex di conseguenza.)

Secondo regex101.com ci sono due dei seguenti errori:

| L'alternatore in questa posizione tronca efficacemente il gruppo, rendendo inutili altri token oltre questo punto

Questo significa che ci sono ||s nel tuo codice, essenzialmente.

Nota: se si desidera abbinare il nulla (l'equivalente di una stringa vuota), non dovrebbero esserci alterazioni in seguito, poiché questo motore regex corrisponde alla prima alternanza possibile.

Eccoli:

  • ||make
  • |with||i

(Trovato con il regex: ||)