こんにちは、私のプロジェクトに取り組んでいます。私は以下のアルゴリズムを使ってテキストブロックの候補を取得したい。Python Pandas出力をcsvに保存する方法
私の入力が含まれているCSV形式のドキュメントです:
- HTML列:行のHTMLコードのタグ
- 言葉::内のテキスト行
- タグ列のHTMLコードアリーンタグ
- TC:ラインにおけるアンカー・ワードの数
- TG:タグの数ライン
- LTC内の単語の数ライン
- P:タグpの数およびBr線
- CTTDで:TCの+(0.2 * LTC)+ TG - P
- CTTDs:平滑CTTD
これは、テキストブロックの候補を見つけるための私のアルゴリズムです。私はcsvファイルをpandasを使ってデータフレームにします。私は候補を見つけるためにCTTD、TC、TGの列を使用しています。
from ListSmoothing import get_filepaths_smoothing
import pandas as pd
import numpy as np
import csv
filenames = get_filepaths_smoothing(r"C:\Users\kimhyesung\PycharmProjects\newsextraction\smoothing")
index = 0
for f in filenames:
file_html=open(str(f),"r")
df = pd.read_csv(file_html)
#df = pd.read_csv('smoothing/Smoothing001.csv')
news = np.array(df['CTTDs'])
new = np.array(df['TG'])
minval = np.min(news[np.nonzero(news)])
maxval = np.max(news[np.nonzero(news)])
j = 0.2
thetaCTTD = minval + j * (maxval-minval)
#maxGap = np.max(new[np.nonzero(new)])
#minGap = np.min(new[np.nonzero(new)])
thetaGap = np.min(new[np.nonzero(new)])
#print thetaCTTD
#print maxval
#print minval
#print thetaGap
def create_candidates(df, thetaCTTD, thetaGAP):
k = 0
TB = {}
TC = 0
for index in range(0, len(df) - 1):
start = index
if df.ix[index]['CTTDs'] > thetaCTTD:
start = index
gap = 0
TC = df.ix[index]['TC']
for index in range(index + 1, len(df) - 1):
if df.ix[index]['TG'] == 0:
continue
elif df.ix[index]['CTTDs'] <= thetaCTTD and gap >= thetaGAP:
break
elif df.ix[index]['CTTDs'] <= thetaCTTD:
gap += 1
TC += df.ix[index]['TC']
if (TC < 1) or (start == index):
continue
TB.update({
k: {
'start': start,
'end': index - 1
}
})
k += 1
return TB
def get_unique_candidate(TB):
TB = tb.copy()
for key, value in tb.iteritems():
if key == len(tb) - 1:
break
if value['end'] == tb[key+1]['end']:
del TB[key+1]
elif value['start'] < tb[key+1]['start'] < value['end']:
TB[key]['end'] = tb[key+1]['start'] - 1
else:
continue
return TB
index += 1
stored_file = "textcandidate/textcandidate" + '{0:03}'.format(index) + ".csv"
tb = create_candidates(df, thetaCTTD, thetaGap)
TB = get_unique_candidate(tb)
filewrite = open(stored_file, "wb")
df_list = []
for (k, d) in TB.iteritems():
candidate_df = df.loc[d['start']:d['end']]
candidate_df['candidate'] = k
df_list.append(candidate_df)
output_df = pd.concat(df_list)
output_df.to_csv(stored_file)
writer = csv.writer(filewrite, lineterminator='\n')
filewrite.close
ThetaCTTDが10.36でありthethaGap 1.
ある出力
ある出力は、テキストブロックの2つの候補があることを意味します。最初に、テキストブロックの候補は、行番号215と行末番号225から始まります(pict bellowのように)。もう1つのテキストブロックの候補は、行番号500と行末番号501から始まります。
私の質問は、行の数だけでなく、テキストブロックの範囲と他の列をcsvに保存する方法です出力としても表示されますか?
私の予想出力は、候補テキストブロックのスクリーンショットのようなものですが、あなたの出力を想定すると、この1
私はあなたが何を意味するのか分かりません。私に説明することはできますか?私のコードでどのような構文を追加する必要があります。私は自分のプログラムにあなたのコードを直接追加しますが、動作しません。 –
[ここ](https://i.stack.imgur.com/ZzlDy.jpg)で印刷した変数は何ですか? – IanS
私はTBの中でxのために印刷します.iteritems():print x。 TB.UPDATE –