gpt4 book ai didi

python - TF IDF 矢量化分词文档时出现问题?

转载 作者:行者123 更新时间:2023-11-30 08:58:06 26 4
gpt4 key购买 nike

我正在使用具有以下样式的标记对文本 blob 进行矢量化:

hi__(how are you), 908__(number code), the__(POS)

正如您所看到的, token 已通过 __(info) 附加了一些信息,我正在使用 tfidf 提取关键词,如下所示:

vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(doc)
indices = np.argsort(vectorizer.idf_)[::-1]
features = vectorizer.get_feature_names()

问题是,当我执行上述提取关键字的过程时,我怀疑矢量化器对象正在从我的文本 block 中删除括号。因此,我可以使用 tfidf 矢量器对象中的哪个参数来保留括号中的此类信息?

更新

我也尝试过:

from sklearn.feature_extraction.text import TfidfVectorizer

def dummy_fun(doc):
return doc

tfidf = TfidfVectorizer(
analyzer='word',
tokenizer=dummy_fun,
preprocessor=dummy_fun,
token_pattern=None)

from sklearn.feature_extraction.text import TfidfVectorizer

def dummy_fun(doc):
return doc

tfidf = TfidfVectorizer(
tokenizer=dummy_fun,
preprocessor=dummy_fun,
token_pattern=None)

但是,这会返回一个字符序列,而不是我已经标记化的标记:

['e', 's', '_', 'a', 't', 'o', 'c', 'r', 'i', 'n']

最佳答案

问题是 TfidfVectorizer 使用的默认标记化明确忽略所有标点符号:

token_pattern : string

Regular expression denoting what constitutes a “token”, only used if analyzer == 'word'. The default regexp selects tokens of 2 or more alphanumeric characters (punctuation is completely ignored and always treated as a token separator).

您的问题与 this previous question 有关但您不想将标点符号视为单独的标记,而是希望防止 token__(info) 拆分标记。在这两种情况下,解决方案都是编写自定义 token_pattern,尽管确切的模式不同。

假设每个 token 都已附加 __(info):

vectorizer = TfidfVectorizer(token_pattern=r'(?u)\b\w\w+__\([\w\s]*\)')
X = vectorizer.fit_transform(doc)

我只是修改了默认的 token_pattern,因此它现在匹配任何 2 个或更多字母数字字符,后跟 __(、0 个或多个字母数字或空白字符,并以)。如果您想了解有关如何编写自己的 token_pattern 的更多信息,请参阅 regular expressions 的 Python 文档。 .

关于python - TF IDF 矢量化分词文档时出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51549641/

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