如何将字符串中的ngram和词频转换为向量,以建立SVN模型。

2024-05-19 01:44:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用Python和NLTK对文本字符串进行文本分类,这些字符串的长度通常只有10-20个单词。在

我想计算词频,和大小为2-4的ngram,然后以某种方式将它们转换成向量,然后用它来建立SVN模型。在

我在想可能有一个非常标准的NLTK方法来完成所有这些事情,但是我很难找到它。在

我在想,标准的方法可能已经很聪明了,比如词干(所以“Important”和“Importance”会被视为同一个词)、去掉标点符号、超普通的英语单词, 可能会有一个聪明的方法把这些计数转换成向量。 我对文本分类和python都是新手,对这两个建议都很开放!在


Tags: 方法字符串模型文本标准方式分类svn
1条回答
网友
1楼 · 发布于 2024-05-19 01:44:38

好吧,我第一次尝试回答堆栈溢出问题。。。在

你的问题有点含糊,所以我会尽我所能回答它。这听起来像是在问如何在构建SVN模型之前准备好文本,特别是如何对文本输入进行词法化,计算词频,以及从给定的字符串创建n个单词。在

import nltk
from collections import Counter
from nltk import ngrams
from nltk.stem import WordNetLemmatizer


# lowercase, remove punctuation, and lemmatize string
def word_generator(str):
    wnl = WordNetLemmatizer()
    clean = nltk.word_tokenize(str)
    words = [wnl.lemmatize(word.lower()) for word in clean if word.isalpha()]
    for word in words:
        yield word


# create list of freqs
def freq_count(str):
    voc_freq = Counter()
    for word in word_generator(str):
        voc_freq[word] += 1
    trimmed = sorted(voc_freq.items(), reverse=True, key=lambda x: x[1])
    return trimmed


# create n-grams
def make_ngrams(str, n):
    grams = ngrams([word for word in word_generator(str)], n)
    return list(grams)

示例4克输出:

^{pr2}$

然后你可以做任何你想做的事情,比如创建向量。在

相关问题 更多 >

    热门问题