简单的文本解析器

时间:2011-08-26 13:05:17

标签: parsing python-3.x

我想创建一个非常简单的解析器来转换:

“我今天晚上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循环中逐步使用文本,字符。但我猜这是一种更优雅的方法。

谢谢,

百里

2 个答案:

答案 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))

可以改进吗?

感谢!