计算文档中的令牌



我需要计算训练数据中每个令牌的频率,列出频率至少等于N的令牌列表。为了将我的数据集拆分为训练和测试,我做了以下操作:

X = vectorizer.fit_transform(df['Text'].replace(np.NaN, ""))
y=df['Label']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.30, stratify=y)

如果Text列包含句子,例如

Text
Show some code
Describe what you've tried
Have a non-programming question?
More helpful links 

提取所有令牌,我做如下:

import pandas as pd
from nltk.tokenize import word_tokenize
X_train['tokenized_text'] = X_train.Text.apply(lambda row: word_tokenize(row))

这为我提供了本地令牌,而不是全局令牌。我应该有all列表并对所有行进行计数,以便生成一个频率至少等于N的令牌列表。我的困难在于计算所有列中代币的频率。

你能告诉我如何数这些代币吗?

更新:

以下代码运行良好:

df.Text.str.split(expand=True).stack().value_counts()

然而,我不知道如何提取计数>例如15。

假设您认为以下方法适用于

s = df.Text.str.split(expand=True).stack().value_counts()

然后你可以做

s[s>=15].index

以获得具有至少CCD_ 3计数的令牌。

然而,第一行并没有给出与nltk.word_tokenize相同的标记化。如果您想要后者的输出,您可以将第一行替换为:

s = df.Text.apply(lambda row: word_tokenize(row)).explode().value_counts()

它从您的样本数据中得出以下内容:

Have               1
you                1
what               1
a                  1
Describe           1
've                1
non-programming    1
tried              1
some               1
code               1
?                  1
links              1
Show               1
helpful            1
More               1
question           1
Name: Text, dtype: int64

您可以使用Counter集合来执行您需要的操作,然后只使用根据限制筛选的单词创建辅助列表。检查以下代码作为限制2的示例:

from collections import Counter
test_list = ["test", "test", "word", "hello"]
counter = Counter(test_list)
filtered_counter = {k:v for k, v in counter.items() if v >= 2}

最新更新