繁体   English   中英

如何在Python中将字符串拆分为单词(即使单词具有标点符号)

[英]How to split string into words, even if words have punctuation, in Python

我正在尝试使用一本长词典使法语翻译。 我想将字符串拆分为单词,即使单词带有标点符号也是如此。

我尝试将带有标点符号的项目添加到词典中,例如[“ 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!"]
 ["__""]

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

看看这个 ,它可以帮助您忽略字母的大小写。 对于标点符号,您可以将其删除,但不在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等其他技术。

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

import nltk

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

tokenizer = nltk.WordPunctTokenizer()
tokenizer.tokenize(text)
 ['Hello', '!', 'Hello', 'hello', ',', 'Hello', 'and', 'hello', '!', 'Hello', '!'] 

严格遵循您的代码:

for x in range(len(TEXT)):

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

    FRTEXT.append(frtext)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM