我想创建一个非常简单的解析器来转换:
“我今天晚上10点15分准备好这件事Gönzalés先生。!”到:
( 'I', ' ', 'wan', '\'', 't', ' ', 'this', ' ', 'to', ' ', 'be', ' ', 'ready', ' ', 'by', ' ', '10', ':', '15', ' ', 'p', '.', 'm', '.', ' ', 'today', ' ', 'Mr' '.' ' ', 'Gönzalés', '.' '!' )
所以基本上我想要将连续的字母和数字分组成一个字符串。我正在使用Python 3,我不想安装外部库。我也希望解决方案尽可能高效,因为我将处理一本书。
那么在解决这个问题时你会建议我采用什么方法。任何例子?
我现在能想到的唯一方法是在for循环中逐步使用文本,字符。但我猜这是一种更优雅的方法。
谢谢,
百里
答案 0 :(得分:0)
您正在寻找一种称为标记化的过程。这意味着将原始文本拆分为离散的“标记”,在我们的例子中只是单词。对于编程语言来说,这很容易,但不幸的是,对于自然语言来说并非如此。
您需要做两件事:在句子中分割文本并将句子分成单词。通常我们使用正则表达式。天真地你可以用“。”模式来分割句子,即句号后跟空格,然后用空格分割句子中的单词。然而,这不会很好地工作,因为缩写通常也以句号结束。事实证明,标记化和句子分割实际上相当棘手。您可以尝试使用几个regexp,但最好使用现成的tokenizer。我知道你不想安装任何外部库,但我相信这将免除你以后的痛苦。 NLTK有很好的标记器。
答案 1 :(得分:0)
我相信这是一个解决方案:
import regex text = "123 2 can't, 4 Å, é, and 中ABC _ sh_t" print(regex.findall('\d+|\P{alpha}|\p{alpha}+', text))
可以改进吗?
感谢!