0

我正在尝试使用一本长字典制作法语翻译。我想将字符串拆分成单词,即使单词有标点符号。

我已经尝试将带有标点符号的项目添加到字典中,例如 ["Hello!": "Bonjour!"],但这会花费相当长的时间,并且可能有更紧凑和简单的方法可以做到这一点。

代码:

frtext = "__"
FRTEXT = []


french = {

    "hello": "bonjour",
    "Hello": "Bonjour",
    "What": "Qu'est-ce que"
}



text = input("Enter text: ")
TEXT = text.split()

for x in range(len(TEXT)):

    if TEXT[x] in french:
        frtext = french[TEXT[x]]

    FRTEXT.append(frtext)

预期输出:

 ["Hello!"]
 ["Bonjour!"]

实际输出:

 ["Hello!"]
 ["__""]

有没有办法做到这一点,如果有,你怎么做?任何答案将不胜感激。

4

3 回答 3

2

看看这个,它可以帮助你忽略字母的大小写。对于标点符号,您可以将其删除,任何不在 az 或 AZ 范围内的内容都会从文本中删除。

稍作改动,所以如果没有有效的翻译,他还是会附加原件:

for word in TEXT:
    word = word.lower()
    if word in french:
        frtext = french[word]
    else:
       frtext = word

    FRTEXT.append(frtext)

对您的代码的改进:

frword = ''
frtext = []


translator = {
    'hello': 'bonjour',
    'what': 'qu\'est-ce que'
}

text = input('Enter text: ')

for word in text.split():
    word = word.lower()
    word = translator.get(word, word)
    frtext.append(word)

print(' '.join(frtext))

删除标点符号很简单:

import string

final_text = ''
letters = string.ascii_lowercase + string.ascii_uppercase + ' '
for letter in text:
    if letter in letters:
        final_text += letter

然后你处理final_text.

当然,这是一个简单的解决方案,更进一步需要更多的知识并使用NLP等其他技术。

于 2019-06-10T15:40:13.210 回答
2

对于复杂的文本工作,使用NLTK是一个好主意。它有许多很好的文本算法,可用于简化文本处理(请注意,它是一个相当大的库):

import nltk

text = 'Hello! Hello hello, Hello and hello! Hello!'

tokenizer = nltk.WordPunctTokenizer()
tokenizer.tokenize(text)
['Hello',
 '!',
 'Hello',
 'hello',
 ',',
 'Hello',
 'and',
 'hello',
 '!',
 'Hello',
 '!']
于 2019-06-10T15:42:49.603 回答
1

严格遵循您的代码:

for x in range(len(TEXT)):

    if TEXT[x] in french:
        frtext = french[TEXT[x]]

    FRTEXT.append(frtext)

您的追加调用是在 if 条件之外进行的。因此,您将附加与字典键匹配的单词,但如果 TEXT[x] 与字典键不匹配,还将附加“__”字符串。

于 2019-06-10T15:46:35.127 回答