从文本中解析意义

11 投票
7 回答
14022 浏览
提问于 2025-04-15 12:57

我知道这个话题很广泛,但我想找一些关于如何从文本中提取意义的基础知识,最好是用Python来实现。举个例子,如果用户发了一篇博客,内容是:

“曼尼·拉米雷斯今天为道奇队回归,迎战休斯顿太空人”,

那么有没有简单的方法可以从这句话中提取出名词呢?一开始,我想先从专有名词入手,但我也不想仅仅局限于此(而且我不想依赖那种简单的正则表达式,认为任何首字母大写的词都是专有名词)。

更糟糕的是,我可能还有一些没问的问题。比如,我需要一个现有单词的语料库来开始吗?我需要了解哪些词汇分析的知识才能让这个工作顺利进行?我确实看到过另一个相关问题,现在我正在研究那些资源。

7 个回答

7

自然语言处理(NLP)就是处理我们日常使用的语言。这里面有很多算法和方法,而且这个领域还在不断发展。无论你写什么算法,都需要用大量的文本来训练它。就像人类学习语言一样,我们通过阅读别人写的文字(或者听别人说的话)来学习。

如果你想实际操作一下,可以看看自然语言工具包。如果你想了解一些理论基础,可以参考统计自然语言处理基础这本书,作者是Chris Manning和Hinrich Schütze。

alt text
(来源: stanford.edu)

11

你需要看看这个叫做自然语言工具包的东西,它正是用来处理这种情况的。

手册的这一部分看起来非常相关:对单词进行分类和标记 - 这里有一段摘录:

>>> text = nltk.word_tokenize("And now for something completely different")
>>> nltk.pos_tag(text)
[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'),
('completely', 'RB'), ('different', 'JJ')]

在这里我们看到and是CC,表示协调连词;nowcompletely是RB,表示副词;for是IN,表示介词;something是NN,表示名词;而different是JJ,表示形容词。

8

可以使用NLTK,特别是第七章关于信息提取的内容。

你提到想要提取意义,虽然有一些模块可以进行语义分析,但我觉得信息提取(IE)就足够了——说实话,这也是目前计算机在自然语言处理(NLP)领域能处理的少数几个方面之一。

可以看看第7.5和7.6节,里面讲了命名实体识别(Named Entity Recognition),比如把“Manny Ramerez”识别为一个人,把“Dodgers”识别为一个体育组织,把“Houston Astros”识别为另一个体育组织,或者根据你的需求进行分类,还有关系提取。安装好NLTK后,你可以使用一个NER分块器来处理这些内容。从他们的示例中,你可以提取一个地缘政治实体(GPE)和一个人:

>>> sent = nltk.corpus.treebank.tagged_sents()[22]
>>> print nltk.ne_chunk(sent) 
(S
  The/DT
  (GPE U.S./NNP)
  is/VBZ
  one/CD
  ...
  according/VBG
  to/TO
  (PERSON Brooke/NNP T./NNP Mossman/NNP)
  ...)

注意,你仍然需要了解分词和标记的知识,正如之前章节所讨论的,这样才能把你的文本整理成适合这些信息提取任务的格式。

撰写回答