Python 如何从函数的结果中删除None?

Python 如何从函数的结果中删除None?,python,nonetype,topic-modeling,nmf,Python,Nonetype,Topic Modeling,Nmf,对不起,我还是解决不了这个问题。我使用NMF算法获取语料库的主题,然后尝试检索附加到每个主题的文档。但是没有人阻止我!当我试图检索文档时,出现了一个错误 脚本: import pandas import numpy as np import pandas as pd from sklearn.decomposition import NMF from sklearn.feature_extraction.text import TfidfVectorizer def display_topic

对不起,我还是解决不了这个问题。我使用NMF算法获取语料库的主题,然后尝试检索附加到每个主题的文档。但是没有人阻止我!当我试图检索文档时,出现了一个错误

脚本:

import pandas
import numpy as np
import pandas as pd
from sklearn.decomposition import NMF
from sklearn.feature_extraction.text import TfidfVectorizer

def display_topics(model, feature_names, n_top_words):
    for topic_idx, topic in enumerate(model.components_):
        print "Topic %d:" % (topic_idx)
        print " ".join([feature_names[i] for i in topic.argsort()[:-n_top_words - 1:-1]])  

text = pandas.read_csv('pretraitement_virgile.csv', encoding = 'utf-8')
good_text = text['phrase']
bad_text = text['raw_phrase']
bad_text_list = bad_text.values.tolist()
good_text_list = good_text.values.tolist()

tfidf_vectorizer = TfidfVectorizer()
tfidf = tfidf_vectorizer.fit_transform(good_text_list)
tfidf_feature_names = tfidf_vectorizer.get_feature_names()

topics_number = 3

# Run NMF
nmf = NMF(n_components=topics_number, random_state=1, alpha=.1, l1_ratio=.5, init='nndsvd').fit(tfidf)
document_topics = nmf.fit_transform(tfidf)

n_top_words = 10
print 'NMF topics'
topics = display_topics(nmf, tfidf_feature_names, n_top_words)
print topics

print 

print 'Documents per topic'
for topic in range(len(topics)): 
    if topic == None:
        pass
    else:
        print("Topic {}:".format(topic))
        docs = np.argsort(document_topics[:, topic])[::-1]
        for mail in docs[:3]:
            bad_text_list_n = " ".join(bad_text_list[mail].split(",")[:2])
            print (" ".join(good_text_list[mail].split(",")[:2]) + ',' + bad_text_list_n)
我试图设置一个忽略名称的条件,但它不起作用。我仍然有相同的错误

主题0:

订单取消交货日期不希望门店总是提前

专题1:

产品未破损,仅包装到货,颜色到货

专题2:

产品未退货现场门店收货订单提前可用

没有

文件主题

回溯(最近一次呼叫最后一次): 文件“NMF.py”,第49行,在 对于范围内的主题(len(主题)):

TypeError:类型为“NoneType”的对象没有len()

我需要这个结果:

主题0:

订单取消交货日期不希望门店总是提前

专题1:

产品未破损,仅包装到货,颜色到货

专题2:

产品未退货现场门店收货订单提前可用

文件主题

主题0:

文本文本文本

文本文本文本

文本文本文本

专题1:

文本文本文本

文本文本文本

文本文本文本

专题2:

文本文本文本

文本文本文本

文本文本文本

一些(愚蠢的)数据示例:

phrase,raw_phrase
delicious fruit mango, the mango is a delicious fruit
important object computer, the computer is an important object
popular banana fruit, banana is a popular fruit
pen important thing, pen is an important thing
purple grape, the grape is purple
phone world object, the phone is a worldwide object

您的过程
display\u topics
没有返回任何内容,但是您将其结果分配给变量
topics
,然后该变量设置为
Null
。您不能在
Null
对象上迭代。

您的过程
display\u topics
不会返回任何内容,但您将其结果分配给变量
topics
,然后该变量设置为
Null
。并且您不能在
Null
对象上迭代。

正如错误消息所指出的,您的错误发生在这一行:

for topic in range(len(topics)): 
由于python试图获取对象
主题的长度,因此作为
None
类型,它没有长度

如果要在
主题
空时跳过整个循环,可以使用:

for topic in topics: 
并将所有
主题[topic]
更改为仅
主题

或者,如果要捕获该错误,可以编写:

try:
    l = len(topics)
except TypeError:
    # do somthing about it like:
    l = 0

for topic in range(l):
   # go on in topic loop
或者,在创建
主题
对象后,您可以使用以下选项检查无:

if variable is None:
    topics = #something else or empty with ""

正如错误消息所指出的,您的错误发生在这一行:

for topic in range(len(topics)): 
由于python试图获取对象
主题的长度,因此作为
None
类型,它没有长度

如果要在
主题
空时跳过整个循环,可以使用:

for topic in topics: 
并将所有
主题[topic]
更改为仅
主题

或者,如果要捕获该错误,可以编写:

try:
    l = len(topics)
except TypeError:
    # do somthing about it like:
    l = 0

for topic in range(l):
   # go on in topic loop
或者,在创建
主题
对象后,您可以使用以下选项检查无:

if variable is None:
    topics = #something else or empty with ""

也许只需尝试对主题中的主题执行
而不是对范围内的主题执行
(len(topics))
您还可以粘贴一些示例数据来重新创建错误吗?@amanbirs Done!也许只需尝试对主题中的主题执行
而不是对范围内的主题执行
(len(topics))
您还可以粘贴一些示例数据来重新创建错误吗?@amanbirs Done!谢谢,但我只需要删除这一个,这样所有的脚本都可以运行…@marin好吧,
主题的价值是什么?你想重复什么?我想检索每个主题的文档。如果我这样做:print'Topic 0'docs=np.argsort(document_topics[:,0])[::-1]它可以工作,但是如果我尝试检索所有主题和文档,它就不起作用了…那么您需要从
display_topics
返回这些内容。谢谢,但我只需要删除这些内容,以便所有脚本都能工作…@marin,
主题的价值应该是什么?你想重复什么?我想检索每个主题的文档。如果我这样做:print'Topic 0'docs=np.argsort(document_topics[:,0])[::-1]它可以工作,但是如果我尝试检索所有主题和文档,它就不工作了……那么您需要从
display_topics
返回这些内容。