我有一个情感分析的任务,使用本该即时通讯语料库的意见有5类(very neg,neg,neu,pos,very pos),从1到5,所以我做的分类如下:
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
tfidf_vect= TfidfVectorizer(use_idf=True, smooth_idf=True,
sublinear_tf=False, ngram_range=(2,2))
from sklearn.cross_validation import train_test_split, cross_val_score
import pandas as pd
df = pd.read_csv('/corpus.csv',
header=0, sep=',', names=['id', 'content', 'label'])
X = tfidf_vect.fit_transform(df['content'].values)
y = df['label'].values
from sklearn import cross_validation
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X,
y, test_size=0.33)
from sklearn.svm import SVC
svm_1 = SVC(kernel='linear')
svm_1.fit(X, y)
svm_1_prediction = svm_1.predict(X_test)
Run Code Online (Sandbox Code Playgroud)
然后根据指标我获得了以下混淆矩阵和分类报告,如下:
print '\nClasification report:\n', classification_report(y_test, …Run Code Online (Sandbox Code Playgroud) 我试图从文本语料库中获取最丰富的功能.从这个回答良好的问题我知道这项任务可以按如下方式完成:
def most_informative_feature_for_class(vectorizer, classifier, classlabel, n=10):
labelid = list(classifier.classes_).index(classlabel)
feature_names = vectorizer.get_feature_names()
topn = sorted(zip(classifier.coef_[labelid], feature_names))[-n:]
for coef, feat in topn:
print classlabel, feat, coef
Run Code Online (Sandbox Code Playgroud)
然后:
most_informative_feature_for_class(tfidf_vect, clf, 5)
Run Code Online (Sandbox Code Playgroud)
对于这个classfier:
X = tfidf_vect.fit_transform(df['content'].values)
y = df['label'].values
from sklearn import cross_validation
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X,
y, test_size=0.33)
clf = SVC(kernel='linear', C=1)
clf.fit(X, y)
prediction = clf.predict(X_test)
Run Code Online (Sandbox Code Playgroud)
问题是输出most_informative_feature_for_class:
5 a_base_de_bien bastante (0, 2451) -0.210683496368
(0, 3533) -0.173621065386
(0, 8034) -0.135543062425
(0, 10346) -0.173621065386
(0, …Run Code Online (Sandbox Code Playgroud) 我有一个包含PDF文件(图像)的大型目录,如何有效地从目录中的所有文件中提取文本?到目前为止,我试图:
import multiprocessing
import textract
def extract_txt(file_path):
text = textract.process(file_path, method='tesseract')
p = multiprocessing.Pool(2)
file_path = ['/Users/user/Desktop/sample.pdf']
list(p.map(extract_txt, file_path))
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用......需要花费很多时间(我有一些文件有600页).另外:a)我不知道如何有效地处理目录转换部分.b)我想添加页面分隔符,让我们说:<start/age = 1> ... page content ... <end/page = 1>但我不知道如何做到这一点.
因此,如何将该extract_txt函数应用于.pdf以另一个目录但以.txt格式结尾并以相同文件返回的目录的所有元素,并添加带有OCR文本提取的页面分隔符?
此外,我很好奇使用谷歌文档来完成这项任务,是否有可能以编程方式使用谷歌文档解决上述文本提取问题?
UPDATE
关于"添加页面分隔符"问题(<start/age = 1> ... page content ... <end/page = 1>)在阅读了Roland Smith的回答后,我尝试:
from PyPDF2 import PdfFileWriter, PdfFileReader
import textract
def extract_text(pdf_file):
inputpdf = PdfFileReader(open(pdf_file, "rb"))
for i in range(inputpdf.numPages):
w = PdfFileWriter()
w.addPage(inputpdf.getPage(i))
outfname = 'page{:03d}.pdf'.format(i)
with …Run Code Online (Sandbox Code Playgroud) 根据文档,我读到可以使用虚拟分类器根据分类算法对其进行测试.
此分类器可用作与其他(实际)分类器进行比较的简单基线.不要将它用于实际问题.
虚拟分类器在使用分层方法时会做什么.我知道文件说:
通过尊重训练集的类分布来生成预测.
任何人都可以给我一个更理论的解释,为什么这是分类器性能的证明?
python artificial-intelligence machine-learning svm scikit-learn
只是一个快速问题的人,我有一个熊猫数据帧:
In [11]: df = pd.DataFrame([['A', 'B'], ['C', E], ['D', 'C']],columns=['X', 'Y', 'Z'])
In [12]: df
Out[12]:
X Y Z
0 A B D
1 C E C
Run Code Online (Sandbox Code Playgroud)
如何转换为降低所有元素df:
Out[12]:
X Y Z
0 a b d
1 c e c
Run Code Online (Sandbox Code Playgroud)
我查看了文档,并尝试了以下内容:
df = [[col.lower() for col in [df["X"],df["Y"], df["Z"]]]]
df
Run Code Online (Sandbox Code Playgroud)
然而,它不起作用.如何降低pandas数据框内的所有元素?
我想为我自己的数据集绘制多类情况的ROC曲线.通过文档我读到标签必须是二进制的(我有5个标签从1到5),所以我按照文档中提供的示例:
print(__doc__)
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
from sklearn.metrics import roc_curve, auc
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import label_binarize
from sklearn.svm import SVC
from sklearn.multiclass import OneVsRestClassifier
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
tfidf_vect= TfidfVectorizer(use_idf=True, smooth_idf=True, sublinear_tf=False, ngram_range=(2,2))
from sklearn.cross_validation import train_test_split, cross_val_score
import pandas as pd
df = pd.read_csv('path/file.csv',
header=0, sep=',', names=['id', 'content', 'label'])
X = tfidf_vect.fit_transform(df['content'].values)
y = df['label'].values
# Binarize the output
y = …Run Code Online (Sandbox Code Playgroud) 我有一个.txt看起来像s字符串的文件.该s字符串由符合word_1随后word_2的id和number:
word_1 word_2 id number
Run Code Online (Sandbox Code Playgroud)
我想创建一个正则表达式,在列表中捕获单词"nunca"后面的单词的所有发生VM_ _ _ _.提取和模式的constrait是一个接一个地出现的事件,其中是字符串的自由字符,例如:"nunca"VM_ _ _ __id
nunca nunca RG 0.293030
first_word second_word VM223FDS 0.902333
error errpr RG 0.345355667
nunca nunca RG 0.1489098
ninguna ninguno DI0S3DF 0.345344
third fourth VM34SDF 0.7865489
Run Code Online (Sandbox Code Playgroud)
这是我想提取的模式,因为它们是一个接一个地放置的.这将是列表中所需的输出:
[(nunca,RG),(second_word, VM223FDS)]
Run Code Online (Sandbox Code Playgroud)
例如,这将是错误的,因为它们不是一个接一个:
nunca nunca RG 0.293030
prendas prenda NCFP000 0.95625
success success VM23434SDF 0.902333
Run Code Online (Sandbox Code Playgroud)
所以对于 …
我有 3 个稀疏矩阵:
In [39]:
mat1
Out[39]:
(1, 878049)
<1x878049 sparse matrix of type '<type 'numpy.int64'>'
with 878048 stored elements in Compressed Sparse Row format>
In [37]:
mat2
Out[37]:
(1, 878049)
<1x878049 sparse matrix of type '<type 'numpy.int64'>'
with 744315 stored elements in Compressed Sparse Row format>
In [35]:
mat3
Out[35]:
(1, 878049)
<1x878049 sparse matrix of type '<type 'numpy.int64'>'
with 788618 stored elements in Compressed Sparse Row format>
Run Code Online (Sandbox Code Playgroud)
从文档中,我了解到可以使用hstack、vstack、 和concatenate它们这种类型的矩阵。所以我试着对hstack …
我有一个嵌套的字符串列表,我想提取它们的日期.日期格式为:
两个数字(从
01到12)连字符树字母(有效月份)连字符两个数字,例如:08-Jan—07或03-Oct—01
我试着使用以下正则表达式:
r'\d{2}(—|-)(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{2,4}'
Run Code Online (Sandbox Code Playgroud)
然后我按如下方式测试:
import pandas as pd
df = pd.DataFrame({'blobs':['6-Feb- 1 4 Facebook’s virtual-reality division created a 3-EBÚ7 11 network of 500 free demo stations in Best Buy stores to give people a taste of VR using the Oculus Rift 90 GT 48 headset. But according to a Wednesday report from Business Insider, about 200 of the demo stations will close after low interest from consumers. 17-Feb-2014',
'I think in a …Run Code Online (Sandbox Code Playgroud) 从文档中我知道,要保存为.csv文件,只需执行以下操作:
df.to_csv(sep = ';')
Run Code Online (Sandbox Code Playgroud)
但是,我想使用我的自定义分隔符,例如::::。如何设置:::为分隔符?我尝试过了:
df.to_csv(sep = ':::')
Run Code Online (Sandbox Code Playgroud)
并得到: TypeError: "delimiter" must be a 1-character string
我也尝试:df.to_csv('../data.csv', sep='\s*\:::', index=False),得到了相同的结果。因此,如何设置自己的分隔符?
更新
因为我在数据框中|,所以不能使用此类字符作为分隔符。我尝试使用以下方法将其删除:
df.replace('\b|\b', '-', regex = True)
但是,它没有用。关于如何删除它的替代方法?
python ×9
scikit-learn ×5
pandas ×4
python-3.x ×4
nlp ×2
python-2.7 ×2
regex ×2
svm ×2
apache-tika ×1
csv ×1
matplotlib ×1
numpy ×1
scipy ×1
string ×1
tesseract ×1