如何解决这个问题?
要解决这个问题,您可以使用句子标记器(如NLTK库中的punkt
模块)对文本进行分句。以下是一个使用Python和NLTK库的示例:
import nltk
from nltk.tokenize import sent_tokenize
text = "The first approach, single-molecule simulation, taken by the StochSim simulator, tracks individual molecules and their state (e.g., what other molecules they are bound to) so that only the complexes formed at any given time are enumerated (and not all possible complexes) [11]."
sentences = sent_tokenize(text)
print(sentences)
这将输出以下结果:
['The first approach, single-molecule simulation, taken by the StochSim simulator, tracks individual molecules and their state (e.g., what other molecules they are bound to) so that only the complexes formed at any given time are enumerated (and not all possible complexes) [11].']
这样,您就可以得到一个包含原始句子的列表,而不是被分割成两个句子。
5条答案
按热度按时间a11xaf1n1#
这与描述的不符,训练算法实际上会捕捉到类似的例子,例如如果它们后面跟着一个逗号。然而,没有逗号的情况下确实会出现错误的行为。看起来像是用于训练预打包的英语pickle模型的宾州树库语料库实际上并不包含例如或即使用必要的频率来识别。
如果这个诊断是准确的,我想到了几个可能的解决方案:
yhxst69z2#
我认为这个punkt模型是在维基百科上训练的,而不是在PTB上。我认为将这些作为已知缩写添加到模型中是可以的(在
abbrev_types
中)。但是我不确定nltk是如何更新它的模型的。quhf5bfb3#
README中提到的分词器使用的是英文。pickle文件是在PTB上训练的,样本中的5%数据集不包含"例如"和"即"这样的示例,所以这是有道理的。我从English.pickle模型中提取了abbrev_types集合(如下所示),但它们似乎不存在。
我可以手动将这些添加到English.pickle文件中(在本地测试过并可以正常工作),但我不知道如何部署一个新的english.pickle模型。
z4iuyo4d4#
好的。虽然那是很久以前的事了,但我们可能选择在PTB上进行训练,因为英语维基百科使用很少的缩写,因此可能对训练一个时期消歧器没有用。
yzuktlbb5#
我也遇到了错误的分割,比如我的句子是
基本上这个文本只包含两个句子,但是
PunktSentenceTokenizer
说有三个句子。