gpt4 book ai didi

python - 通过 Pandas 数据帧运行 nltk sent_tokenize

转载 作者:行者123 更新时间:2023-12-01 12:21:13 24 4
gpt4 key购买 nike

我有一个由两列组成的数据框:ID 和 TEXT。假设数据如下:

ID      TEXT
265 The farmer plants grain. The fisher catches tuna.
456 The sky is blue.
434 The sun is bright.
921 I own a phone. I own a book.

我知道所有 nltk 函数都不适用于数据帧。 sent_tokenize 如何应用于上述数据帧?

当我尝试:
df.TEXT.apply(nltk.sent_tokenize)  

输出与原始数据帧没有变化。我想要的输出是:
TEXT
The farmer plants grain.
The fisher catches tuna.
The sky is blue.
The sun is bright.
I own a phone.
I own a book.

此外,我想将这个新的(所需的)数据帧与这样的原始 ID 数字联系起来(在进一步的文本清理之后):
ID    TEXT
265 'farmer', 'plants', 'grain'
265 'fisher', 'catches', 'tuna'
456 'sky', 'blue'
434 'sun', 'bright'
921 'I', 'own', 'phone'
921 'I', 'own', 'book'

这个问题与我的另一个问题 here 相关。如果我能提供任何信息来帮助澄清我的问题,请告诉我!

最佳答案

编辑 :由于@alexis 有保证的刺激,这里是一个更好的回应

句子标记化

这应该为您提供每个 ID 和句子一行的 DataFrame:

sentences = []
for row in df.itertuples():
for sentence in row[2].split('.'):
if sentence != '':
sentences.append((row[1], sentence))
new_df = pandas.DataFrame(sentences, columns=['ID', 'SENTENCE'])

其输出如下所示:

enter image description here

split('.') 如果句子实际上由句号分隔并且句号没有用于其他用途(例如表示缩写),则会快速将字符串分解成句子,并且会在此过程中删除句号。如果句号有多个用例和/或并非所有句子结尾都用句号表示,这将失败。正如您所问的那样,一种更慢但更健壮的方法是使用 sent_tokenize 逐句拆分行:
sentences = []
for row in df.itertuples():
for sentence in sent_tokenize(row[2]):
sentences.append((row[1], sentence))
new_df = pandas.DataFrame(sentences, columns=['ID', 'SENTENCE'])

这会产生以下输出:

enter image description here

如果您想从这些行中快速删除句点,您可以执行以下操作:
new_df['SENTENCE_noperiods'] = new_df.SENTENCE.apply(lambda x: x.strip('.'))

这将产生:

enter image description here

您还可以采用 apply -> map 方法(df 是您的原始表):
df = df.join(df.TEXT.apply(sent_tokenize).rename('SENTENCES'))

产量:

enter image description here

继续:
sentences = df.SENTENCES.apply(pandas.Series)
sentences.columns = ['sentence {}'.format(n + 1) for n in sentences.columns]

这产生:

enter image description here

由于我们的索引没有改变,我们可以将其加入到我们的原始表中:
df = df.join(sentences)

enter image description here

词标记化

继续上面的 df ,我们可以提取给定句子中的标记如下:
df['sent_1_words'] = df['sentence 1'].apply(word_tokenize)

enter image description here

关于python - 通过 Pandas 数据帧运行 nltk sent_tokenize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43922145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com