计算文档中的标记
Counting tokens in a document
我需要计算训练数据中每个标记的频率,列出频率至少等于 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))
这给了我本地令牌,而不是全局令牌。我应该拥有所有列表并计算所有行,以便列出频率至少等于 N
的标记。
我的困难在于计算所有列中标记的频率。
你能告诉我如何计算这些代币吗?
更新:
以下代码工作正常:
df.Text.str.split(expand=True).stack().value_counts()
但是我不知道如何提取所有 words/tokens 计数 > 15,例如。
您可以使用 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}
假设您说以下工作正常
s = df.Text.str.split(expand=True).stack().value_counts()
那你可以做
s[s>=15].index
获得至少 15
计数的代币。
但是,第一行没有给出与 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
我需要计算训练数据中每个标记的频率,列出频率至少等于 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))
这给了我本地令牌,而不是全局令牌。我应该拥有所有列表并计算所有行,以便列出频率至少等于 N
的标记。
我的困难在于计算所有列中标记的频率。
你能告诉我如何计算这些代币吗?
更新:
以下代码工作正常:
df.Text.str.split(expand=True).stack().value_counts()
但是我不知道如何提取所有 words/tokens 计数 > 15,例如。
您可以使用 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}
假设您说以下工作正常
s = df.Text.str.split(expand=True).stack().value_counts()
那你可以做
s[s>=15].index
获得至少 15
计数的代币。
但是,第一行没有给出与 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