我正在尝试使用一部长词典来翻译法语。我想将字符串分割成多个单词,即使这些单词带有标点符号。
我尝试将内容添加到标有标点符号的字典中,例如[“ 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!"]
["__""]
有没有办法做到这一点,如果有,那你怎么做?任何答案将不胜感激。
答案 0 :(得分: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', '!']
答案 1 :(得分:1)
检出this,可帮助您忽略字母的大小写。对于标点符号,您可以将其删除,不在a-z或A-Z范围内的所有内容将从文本中删除。
稍作更改,因此如果没有有效的翻译,他仍然会附加原始内容:
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。
答案 2 :(得分:1)
严格遵循您的代码:
for x in range(len(TEXT)):
if TEXT[x] in french:
frtext = french[TEXT[x]]
FRTEXT.append(frtext)
您的追加调用是在if条件之外进行的。因此,您将附加与字典键匹配的单词,但是如果TEXT [x]与字典键不匹配,还将附加“ __”字符串。