当前位置: 首页 > 面试题库 >

如何避免NLTK的句子标记词在缩写词上出现分裂?

张心水
2023-03-14
问题内容

我当前正在使用NLTK进行语言处理,但是遇到了句子标记化的问题。

问题出在这里:假设我有一句话:“图2显示了一张美国地图。” 当我使用punkt标记生成器时,我的代码如下所示:

from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters
punkt_param = PunktParameters()
abbreviation = ['U.S.A', 'fig']
punkt_param.abbrev_types = set(abbreviation)
tokenizer = PunktSentenceTokenizer(punkt_param)
tokenizer.tokenize('Fig. 2 shows a U.S.A. map.')

返回以下内容:

['Fig. 2 shows a U.S.A.', 'map.']

分词器无法检测到缩写“ USA”,但可以在“ fig”上使用。现在,当我使用默认标记器时,NLTK提供了:

import nltk
nltk.tokenize.sent_tokenize('Fig. 2 shows a U.S.A. map.')

这次我得到:

['Fig.', '2 shows a U.S.A. map.']

它可以识别更常见的“美国”,但看不到“无花果”!

如何结合这两种方法?我想使用默认缩写选项以及添加自己的缩写。


问题答案:

我认为缩写列表中的 美国小写字母 将对您有效。

from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters
punkt_param = PunktParameters()
abbreviation = ['u.s.a', 'fig']
punkt_param.abbrev_types = set(abbreviation)
tokenizer = PunktSentenceTokenizer(punkt_param)
tokenizer.tokenize('Fig. 2 shows a U.S.A. map.')

它返回给我:

['Fig. 2 shows a U.S.A. map.']


 类似资料:
  • 问题内容: 我试图将整个段落输入到我的文字处理器中,然后先分成句子,然后再分成单词。 我尝试了以下代码,但它不起作用, 但是,这不起作用,并给我错误。那么,如何将段落标记为句子,然后再标记为单词? 一个示例段落: 这东西似乎使那只黑褐色的小狗感到吃惊和震惊,使他伤心。 他绝望地沉在孩子的脚下。当重击一声再加上幼稚的训诫时,他转过身来,用独特的方式握住了爪子。同时,他用耳朵和眼睛向孩子祈祷。 警告:

  • 问题内容: 我正在使用NLTK来分析一些经典文本,并且遇到麻烦按句子标记文本的麻烦。例如,这是我从 Moby Dick 获得的摘录的内容: 考虑到梅尔维尔(Melville)的语法有些陈旧,我不希望在这里达到完美,但是NLTK应该能够处理终端双引号和标题,例如“ Mrs”。但是,由于令牌生成器是无监督训练算法的结果,所以我不知道该如何进行修补。 有人建议使用更好的句子标记器吗?我更喜欢可以破解的简

  • 问题内容: 我正在使用nltk,因此我想创建自己的自定义文本,就像nltk.books上的默认文本一样。但是,我只是想起像 我想发现任何输入“文本”的方式: python或nltk的哪种方法允许我执行此操作。更重要的是,我如何消除标点符号? 问题答案: 这实际上是在nltk.org的主页上:

  • 问题内容: 我基本上和这个人有同样的问题.. NLTK书中针对朴素贝叶斯分类器的示例仅考虑单词是否在文档中作为特征出现。它不考虑单词的出现频率作为特征。看一下(“词袋”)。 答案之一似乎表明,内置NLTK分类器无法做到这一点。是这样吗 如何使用NLTK进行频率/词袋NB分类? 为了进行培训,请创建可用于创建ProbDists的适当的FreqDist,然后再将其传递给NaiveBayesClassi

  • 下面的lexer语法片段应该根据类中定义的谓词来标记“自定义名称”: CUSTOM_NAME的正确匹配总是尽可能长的匹配。现在,如果lexer遇到一个自定义名称,比如,那么我希望它对整个字符串,然后用'some:cname'作为参数调用一次谓词。 编辑:这种行为的有趣之处在于,只要将部分匹配传递给谓词,谓词的结果似乎完全被lexer忽略了。这似乎效率很低。

  • 问题内容: 我现在有一个wordnet中所有名词的列表,我只想保留车辆中的单词,其余的删除。我该怎么做?下面是我要制作的伪代码,但我不知道如何使它工作 问题答案: 这会给你从每一个同义词集这是一个所有独特的词下义词的名词“车辆”(第一感觉)的。

  • 我有一个文本文件,其中的文字是语音标记的一部分。文件可以在这里看到。因此,每个单词及其标记都在一行中。句子由标记空间划分。我正在尝试创建一个程序,1)查找频率高于1的单词,包括句子级别的标记名词、动词、ADJ和ADV 2)打印找到的频率总和。我创建的程序错误地计算了频率,因为它在前面的句子中添加了相同单词的频率。这不是我想要的。我想计算每个句子中项目(单词和标记)的频率,而不累积之前句子的频率。有

  • 我实际上是一个新手到Java,并试图做一个小项目。所以,在我的项目中,我想让用户输入一个句子,我想让程序在句子中搜索特定的单词,并基于此给出输出。我使用NetBeans开发我的应用程序。 我的代码是这样的 我知道这段代码没有意义,也不会运行,但我这样说是为了让人们对我试图实现的目标有一个大致的了解。 请帮帮我.