Преобразование раннего современного английского языка в правописание 20-го века с использованием NLTK - PullRequest
3 голосов
/ 28 августа 2010

У меня есть список строк, которые все ранние современные английские слова заканчиваются на «th». К ним относятся хат, назначает, демантет и т. Д. - все они сопряжены для единственного лица третьего лица.

В рамках гораздо более крупного проекта (использующего мой компьютер для преобразования этнекста Гутенберга из Гаргантюа и Пантагрюэля в нечто более похожее на английский 20-го века, так что я смогу читать его легче) два или три символа от всех этих слов и замените их на «,», затем используйте слегка измененную функцию для слов, которые еще не были модернизированы, оба включены ниже.

Моя главная проблема в том, что мне просто не удается правильно набрать текст на Python. Я считаю, что эта часть языка действительно сбивает с толку.

Вот функция, которая удаляет th:

from __future__ import division
import nltk, re, pprint

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

Вот функция, которая удаляет посторонние е:

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

следовательно, слова «ослабевает» и «обвиняет» будут проходить через Этрему, но не через Этрем (этрему), в то время как слово «абхоррет» должно проходить через оба.

Если кто-нибудь может придумать более эффективный способ сделать это, я весь слух.

Вот результат моей очень любительской попытки использовать эти функции в списке токенов, которые необходимо модернизировать:

>>> 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'

Так что, да, это действительно проблема набора текста. Это первые функции, которые я когда-либо писал на Python, и я не знаю, как применить их к реальным объектам.

1 Ответ

6 голосов
/ 28 августа 2010

ethrema() не является методом типа str, вы должны использовать следующее:

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

РЕДАКТИРОВАТЬ (чтобы ответить на комментарий):

ethremb(ethrema(word)) бытне будет работать, пока вы не внесете небольшие изменения в свои функции:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...