Trasformare inglese prima età moderna in 20 ° secolo l'ortografia utilizzando il NLTK

StackOverflow https://stackoverflow.com/questions/3591673

  •  01-10-2019
  •  | 
  •  

Domanda

Ho una lista di stringhe che sono tutti i primi moderni le parole inglesi che terminano con 'th'. Questi includono hath, vi stabilisce, demandeth, ecc -. Sono tutti coniugati per la terza persona singolare

Come parte di un progetto molto più grande (usando il mio computer per convertire l'etext Gutenberg di Gargantua e Pantagruel in qualcosa di più simile a 20 ° secolo inglese, in modo che sarò in grado di leggere più facilmente) Voglio rimuovere l'ultimo due o tre caratteri da tutte quelle parole e sostituirle con un 's,' quindi utilizzare una funzione leggermente modificata sulle parole che ancora non sono stati modernizzati, entrambi inclusi sotto.

Il mio problema principale è che non mi sono mai riuscito a ottenere la mia digitazione a destra in Python. Trovo che parte del linguaggio davvero confuso a questo punto.

Ecco la funzione che rimuove ° è in:

from __future__ import division
import nltk, re, pprint

def ethrema(word):
    if word.endswith('th'):
        return word[:-2] + 's'

Ecco la funzione che rimuove estranee e di:

def ethremb(word):
    if word.endswith('es'):
        return word[:-2] + 's'

quindi le parole 'abateth' e 'accuseth' passerebbe attraverso ethrema ma non attraverso ethremb (ethrema), mentre la parola 'dispetta' dovrebbe passare attraverso entrambi.

Se qualcuno può pensare a un modo più efficiente per fare questo, io sono tutto orecchi.

Ecco il risultato del mio tentativo molto dilettantesco per utilizzare queste funzioni in un elenco in formato token di parole che hanno bisogno ammodernamento:

>>> eth1 = [w.ethrema() for w in text]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'ethrema'

Quindi, sì, è davvero una questione di battitura. Queste sono le prime funzioni che io abbia mai scritto in Python, e non ho idea di come applicarli a oggetti reali.

È stato utile?

Soluzione

ethrema() non è un metodo di tipo str, è necessario utilizzare il seguente:

eth1 = [ethrema(w) for w in text]
#AND
eth2 = [ethremb(w) for w in text]

EDIT (alla risposta commento):

ethremb(ethrema(word)) non avrebbe funzionato fino a quando hai fatto alcune piccole modifiche al tuo funzioni:

def ethrema(word):
    if word.endswith('th'):
        return word[:-2] + 's'
    else
        return word

def ethremb(word):
    if word.endswith('es'):
        return word[:-2] + 's'
    else
        return word

#OR

def ethrema(word):
    if word.endswith('th'):
        return word[:-2] + 's'
    elif word.endswith('es'):
        return word[:-2] + 's'
    else
        return word
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top