Преобразование текста от первого лица во второе и игнорирование кавычек - PullRequest
0 голосов
/ 07 января 2020

Итак, у меня есть это:

import nltk

forms = {"am" : "are", "are" : "am", 'i' : 'you', 'my' : 'yours', 'me' : 'you', 'mine' : 'yours', 'you' : 'I', 'your' : 'my', 'yours' : 'mine'} # More?
def translate(word):
  if word.lower() in forms: return forms[word.lower()]
  return word

sent = 'You went to see Avatar, and I came with you.'
result = ' '.join([translate(word) for word in nltk.wordpunct_tokenize(sent)])
print(result.capitalize())
# I went to see avatar , and you came with i .

Что добавить, чтобы предотвратить преобразование слов в кавычки ""

Пример: пример: ввод: 'I go для фильмов Я говорю: "Что вы хотите увидеть?" Я хочу преобразовать: «Вы go в кино, вы говорите:« Что вы хотите увидеть? » Преобразование я не хочу: «Вы go фильмы, вы говорите:« Что Я хочу увидеть? »

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Вот метод, который позволит вам игнорировать кавычки:

def convertTxt(sent):
    quotes = [] #list of quote locations in txt
    qflag = False
    for c in range(len(sent)):
        if sent[c] == "\"":
            qflag = False if qflag else True
        if qflag:
            quotes.append(c) #record quote locations
    sentloc=0
    res = []
    result = ""
    for word in nltk.wordpunct_tokenize(sent):
        if sentloc in quotes:
            res.append(word) #exclude regions in quotes
        else:
            res.append(translate(word))
        sentloc += len(word) #keep track of sentence location
    for r in range(len(res)):
        if res[r].isalpha():
            if res[r-1][-1] not in "'\"" and (res[r-1][-1].isalpha() or res[r-1][-1] in ",."):
                result += " " + res[r]
            else:
                result += res[r]
        else:
            if res[r][0] not in ",'.?!" or res[r][0] == "\"":
                result += " " + res[r]
            else:
                result += res[r]
    return result
0 голосов
/ 07 января 2020

Я написал несколько многословный сценарий, но он должен сделать свое дело:

sent = 'I go to the movies, I say "What do you want to see?"'

translated = []
quote_mode = False

for word in nltk.wordpunct_tokenize(sent):
    if quote_mode:
        translated.append(word)
        if word == '"': quote_mode = False;

    if not quote_mode:
        translated.append(translate(word))
        if word == '"': quote_mode = True;

result = ' '.join(translated)
print(result.capitalize()) # You go to the movies, you say "What do you want to see?"

В основном, когда строка входит в «режим цитаты», состояние сохраняется, а слова не переводятся. Когда строка выходит из кавычек, слова переводятся.

Ваше первоначальное решение также ставит пробелы между знаками остановки; это можно исправить с помощью:

result = result.replace(' "', '"')\
    .replace(' .', '.')\
    .replace(' ?', '?')\
    .replace(' ,', ',')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...