Python 如何进行句子标记化

Python 如何进行句子标记化,python,nltk,Python,Nltk,这是我用于sent\u tokenize的代码 import nltk from nltk.tokenize import sent_tokenize sent_tokenize(comments1) 数据集 我用一个数组一个接一个地获取句子,但它不起作用 Arr=sent_tokenize(comments1) Arr Arr[0] 当我使用Arr[1]时,会出现这个错误 索引器 中的回溯(最近一次呼叫) ---->1 Arr[1] 索引器:列表索引超出范围 NLTK的sent\u to

这是我用于sent\u tokenize的代码

import nltk
from nltk.tokenize import sent_tokenize
sent_tokenize(comments1)
数据集

我用一个数组一个接一个地获取句子,但它不起作用

Arr=sent_tokenize(comments1)
Arr
Arr[0]
当我使用
Arr[1]
时,会出现这个错误

索引器
中的回溯(最近一次呼叫)
---->1 Arr[1]
索引器:列表索引超出范围

NLTK的
sent\u tokenize
适用于格式良好的文本。我认为您正在寻找正则表达式:

重新导入
注释\u str=“1,反对党议员纳马尔·拉贾帕克萨就威尔帕图森林砍伐问题向环境部长西里塞纳总统提问,但他应该记住,这一切都是从他的父亲和叔叔开始的,可能是他当时处于昏迷状态,反对党议员Namal Rajapaksa就Wilpattu毁林问题向环境部长Sirisena总统提出质疑\n4,Pawu meya ba meyage thathata oka deddi kiyana thibbane“
comments=re.split(r'(?:^\d+,)|(?:\n\d+,)',comments_str)
打印(评论)
产出:

[
'',
“反对党议员纳马尔·拉贾帕克萨就威尔帕图森林砍伐问题向环境部长西里塞纳总统提出质疑,但他应该记住,这一切都是从他的父亲和叔叔开始的,当时他可能处于昏迷状态”,
“反对议员纳马尔·拉贾帕克萨就威尔帕图森林砍伐问题质询环境部长西里塞纳总统”,
“这是我的梦想,是我的梦想”
]

默认的NLTK标记器无法识别此处的句子,因为缺少最后一个字符。您可以在每行换行符
“\n”之前自己添加它

例如:

comments1=comments1.replace(“\n”,“\n”)
标记=已发送\u标记化(注释1)
对于令牌中的令牌:
打印(“句子:”+标记)
您会得到类似的结果(为了可读性而截断):


阅读下面的评论

# Standard sentence tokenizer.
def sent_tokenize(text, language='english'):
    """
    Return a sentence-tokenized copy of *text*,
    using NLTK's recommended sentence tokenizer
    (currently :class:`.PunktSentenceTokenizer`
    for the specified language).

    :param text: text to split into sentences
    :param language: the model name in the Punkt corpus
    """
    tokenizer = load('tokenizers/punkt/{0}.pickle'.format(language))
    return tokenizer.tokenize(text)


def tokenize(self, text, realign_boundaries=True):
    """
    Given a text, returns a list of the sentences in that text.
    """
    return list(self.sentences_from_text(text, realign_boundaries))
由于
language='english'
…作为句子的结尾,它可以在
发送标记化(comments1)
之前添加
comments1=comments1。替换('\n',')


您的案例可能很复杂,因为

这很有效,谢谢Laurent,但我如何使用数组逐个获取句子?您能告诉我使用数组的可能方式吗?在我的代码示例中,tokens是Python(数组)。因此
tokens[0]
是第一句,
tokens[1]
是第二句,依此类推…
# Standard sentence tokenizer.
def sent_tokenize(text, language='english'):
    """
    Return a sentence-tokenized copy of *text*,
    using NLTK's recommended sentence tokenizer
    (currently :class:`.PunktSentenceTokenizer`
    for the specified language).

    :param text: text to split into sentences
    :param language: the model name in the Punkt corpus
    """
    tokenizer = load('tokenizers/punkt/{0}.pickle'.format(language))
    return tokenizer.tokenize(text)


def tokenize(self, text, realign_boundaries=True):
    """
    Given a text, returns a list of the sentences in that text.
    """
    return list(self.sentences_from_text(text, realign_boundaries))