【问题标题】:Feature extraction from text data set从文本数据集中提取特征
【发布时间】:2021-08-09 05:04:35
【问题描述】:

我对文本数据集的特征提取有疑问。使用来自的预处理数据集:

预处理后的数据是每个文档一行,每一行的格式为:

feature:<count> .... feature:<count> #label#:<label>

假设我们有两行:

<line 1> alpha: 3 beta:2 gamma: 1 delta: 0 echo:0 #label:1

<line 2> alpha: 0 foxtrot:0 mike: 0 beta: 1 delta:1 #label:0

所以我想提取我得到的特征:

output

到目前为止,我已经编写了这段代码,但无法继续进行:

import pandas as pd
dict={}
total=pd.DataFrame()
with open ('amazon_book.review', 'r') as data:
    for i in range(3):
        line=data.readline()
        for word in line.split():
            key,value=word.split(sep=":")
            dict[key]=value

【问题讨论】:

  • 首先:dict 是一个默认类,不要用它来命名变量。第二:我无法理解您的要求。我试图运行你的代码,它工作正常,除了在alphadelta 等功能中: 后面有一个空格......
  • 我想将文件的唯一单词作为列和不同的行作为行,这样 df[line 1][word]={word count in that line}。主要目标是在这个文本数据集上执行 k-means 聚类。

标签: python pandas nlp text-processing multilabel-classification


【解决方案1】:

请使用正则表达式。希望下面的代码有所帮助。在数据框总数中,您将获得所有功能和标签

import pandas as pd
import re

list_of_dict = []
str_feature_pattern = re.compile(r'(\w+\s*:\s+\d+)+')
str_label_pattern = re.compile(r'.*#(\w+:\d+)')

with open ('amazon_book.review', 'r') as data:
    for i in range(3):
        line=data.readline()
        feature_match = str_feature_pattern.findall(line)
        label_match = str_label_pattern.findall(line)
        dict = {}
        for f in feature_match:
          vals = f.split(sep=":")
          dict[vals[0]] = vals[1]
        label_val = label_match[0].split(sep=':')
        dict[label_val[0]] = label_val[1]
        list_of_dict.append(dict)
total=pd.DataFrame(list_of_dict)
    

    

【讨论】:

  • @Surjya---------------------------------------- ---------------------------------- IndexError Traceback (most recent call last) &lt;ipython-input-45-f5fbed225a0c&gt; in &lt;module&gt; 15 vals = f.split(sep=":") 16 dict[vals[0]] = vals[1] ---&gt; 17 label_val = label_match[0].split(sep=':') 18 dict[label_val[0]] = label_val[1] 19 list_of_dict.append(dict) IndexError: list index out of range
  • 在第 17 行 (label_val= = label_match[0].split(sep=':')),它说:IndexError: list index out of range
  • 我提供的代码认为您的所有行都包含特征和标签。似乎您的几行不包含标签。如果是这种情况,请调试您的数据。
猜你喜欢
  • 1970-01-01
  • 2019-04-09
  • 2011-02-24
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 2012-06-20
  • 2018-11-18
  • 2021-09-21
相关资源
最近更新 更多