如何创建 TextBlob 列表?

How to create a list of TextBlobs?

这是我在 Whosebug 上的第一个 post,所以请原谅我可能犯的任何失礼行为。我也是 Python 的新手,所以欢迎任何提示。我的问题很简单,但无论我尝试了什么,我似乎都无法弄清楚。这是我的代码:

import os
from bs4 import BeautifulSoup
import string
import nltk
from nltk import WordNetLemmatizer
from nltk.corpus import stopwords
from nltk import FreqDist

# For TF-IDF calculations
import math
from textblob import TextBlob as tb

def tf(word, blob):
    return blob.words.count(word) / len(blob.words)

def n_containing(word, bloblist):
    return sum(1 for blob in bloblist if word in blob.words)

def idf(word, bloblist):
    return math.log(len(bloblist) / (1 + n_containing(word, bloblist)))

def tfidf(word, blob, bloblist):
    return tf(word, blob) * idf(word, bloblist)

rootDir ='D:\rootDir'
testPath = r'D:\testPath'
trainPath = r'D:\trainPath'

data = []
lemmatizer = WordNetLemmatizer()
stop = stopwords.words("english")
stop += ['also']

bloblist_train = [tb('')]  #Before EDIT: bloblist_train = tb('')
bloblist_test = [tb('')]   #Before EDIT: bloblist_test = tb('')

for currentDirPath, subDirs, files in os.walk(rootDir):
    for file in files:
        with open(os.path.join(currentDirPath, file)) as dataFile:
            inFile = dataFile.read()
            html = BeautifulSoup(inFile, "html.parser")
            text = html.get_text()
            text_no_punc = text.translate(str.maketrans("", "", string.punctuation))
            if testPath in currentDirPath:
                bloblist_test += (tb(text_no_punc))
            elif trainPath in currentDirPath:
                bloblist_train += tb(text_no_punc)
            words = text_no_punc.split()
            data = data + words

我正在使用 HTML 文档遍历更大的文件目录并解析它们,然后进一步尝试为每个单词找到 TF-IDF。为此,我混合使用了包和 类,包括 BeautifulSoup、NLTK 和 TextBlob。我正在使用 TextBlob 查找 TF-IDF,但 运行 遇到了创建 TextBlob 列表的问题。我遇到问题的具体线路是:

if testPath in currentDirPath:
    bloblist_test += tb(text_no_punc)
elif trainPath in currentDirPath:
    bloblist_train += tb(text_no_punc)

代码目前只创建一个巨大的 TextBlob,所有文档都连接成一个 TextBlob。我想要每个文档的 TextBlob。我也尝试过以下方法

if testPath in currentDirPath:
    bloblist_test.append(tb(text_no_punc))
elif trainPath in currentDirPath:
    bloblist_train.append(tb(text_no_punc))

给出错误:

AttributeError: 'TextBlob' object has no attribute 'append'

我错过了什么? Append 是我用来创建列表 python 字符串的方法,如下所示:

s1 = [1,2,3]
s2 = [4,5]
s1.append(s2)
# Output: [[1,2,3], [4,5]]

但是 TextBlob 显然不支持这个。

那么我该如何创建这些 Textblob 的列表?

编辑:

所以我自己取得了一些进展,但在格式化列表时仍然遇到问题。我没有将 bloblist_trainbloblist_test 初始化为 tb(''),而是将它们设置为 [tb('')] 因为就像我的问题所说的那样,它们应该包含 TextBlob 的 LIST,而不仅仅是TextBlob。所以现在看起来......它有效!只有一件事我似乎仍然无法正确处理:现在的方式是创建一个列表,其中一个空的 TextBlob 作为第一项(例如 [TextBlob(""), TextBlob("one two three")])。

我意识到这是一个与我开始时略有不同的问题,所以如果有人认为我需要关闭这个问题并开始一个单独的问题,请告诉我。再说一次,我是新人。

如果没有,我觉得我缺少一个简单的关键字或句法解决方案,非常感谢您提供一些意见。

最终我自己找到了答案。我知道答案似乎微不足道,事实证明确实如此,但事实上它与 Textblob 一起工作,我认为它会改变答案的性质。好吧,它没有。我对经验丰富的 python 不假思索地通过了我的问题的人感到失望,因为我只需要做的就是:

bloblist_train = []
bloblist_test = []

for currentDirPath, subDirs, files in os.walk(rootDir):
    for file in files:
        with open(os.path.join(currentDirPath, file)) as dataFile:
        # .
        # .
        # .
            if testPath in currentDirPath:
                bloblist_test += [tb(text_no_punc]
            elif trainPath in currentDirPath:
                bloblist_train += [tb(text_no_punc)]

我在其他语言(如 C++)的领域中感到困惑,我必须在其中将我的变量初始化为它们的预期类型。相反,多亏了 python,我只需要声明一个列表,然后向其中添加内容。对于像我这样的其他初学者,请记住,python 不关心列表中的内容。它可以是您放入其中的任何对象的混合:int、char、string、Textblob 等。只需告诉它您有一个列表,然后添加即可。