循环和由于逻辑缺陷导致的字符串处理错误 - python

时间:2014-11-19 07:54:09

标签: string python-2.7 loops if-statement

我有一个标签列表,我试图打破一些包含多个单词的标签。

data = ['开源','软件开发','JavaScript','技术','网络开发''编程','移动开发','技术','专业''软件''HTML5' ],[..] ....]

我清理数据和保留一些独特标签的代码 -

def break_tags(data):

big_tags = []
for n in range(len(data)):

    tags = []

    for item in data[n][5:23]:
        if item != nan:
            if 'open source' in str(item).lower():
                tags.append('open source')
            if 'data science' in str(item).lower():
                tags.append('data science')

            else:
                item = str(item).lower().split(' ')
                tags.extend([e.strip("'():,&;+?][ ") for e in item if e not in remove])
    big_tags.append(tags)
return big_tags

运行break_tags(数据)后的结果

original_list1 - ['开源''软件开发''JavaScript''技术','Web开发''编程','移动开发','技术','专业''软件''HTML5']

new_list1 - ['开源','开放','来源','软件','开发',        'javascript','技术','网络','开发','编程',        '移动','发展','技术','专业人士','软件',        'HTML5']

原始列表2:['数据管理','云计算','大数据','数据分析',        '数据可视化','预测分析','NoSQL',        '数据科学','数据分析和建模',        '统计和数据分析']

new_list2:['数据','管理','云','计算','大数据','大',        '数据','数据','分析','数据','可视化','预测',        'analytics','nosql','数据科学','数据','科学','数据',        '分析','建模','统计','数据','分析']


我编写了保持'开源'的功能& '数据科学'并将所有其他标签分解为单个单词。但显然存在一些逻辑上的缺陷,不仅使这两个标签保持完整,而且还将这两个标签分开,单独的单词(参见上面的粗体字)

有人可以帮助识别问题吗?谢谢!

1 个答案:

答案 0 :(得分:1)

您的问题在于您的if / if / else条件:

if 'open source' in str(item).lower():
    tags.append('open source')
if 'data science' in str(item).lower():
    tags.append('data science')
else:
    item = str(item).lower().split(' ')
    tags.extend([e.strip("'():,&;+?][ ") for e in item if e not in remove]

假设项目是开源的'那么你将通过第一个if和追加开源#39;然后你将测试VS'数据科学'并通过其他集团。

您必须使用以下内容进行测试:

if ('data science' in str(item).lower()) or ('open source' in str(item).lower()):
    if ('data science' in str(item).lower()):
        tags.append('data science')
    else:
        tags.append('open source')
else:
    item = str(item).lower().split(' ')
    tags.extend([e.strip("'():,&;+?][ ") for e in item if e not in remove]

或者,假设str(item).lower()完全是数据科学'或者'开源':

if str(item).lower() in ['data science', 'open source']:
    tags.append(str(item).lower())
else:
    item = str(item).lower().split(' ')
    tags.extend([e.strip("'():,&;+?][ ") for e in item if e not in remove]