import numpy as np import pandas import csv import order_bounding_boxes_in_each_block from sklearn.cluster import DBSCAN from sklearn import metrics from sklearn.datasets.samples_generator import make_blobs from sklearn.preprocessing import StandardScaler def my_distance(x,y): blub = "ddd" return blub def cluster(file_in, file_out): # ############################################################################# data_df = pandas.read_csv("/home/bscheibel/PycharmProjects/dxf_reader/temporary/list_to_csv_with_avg_points.csv", sep=";") data_df.head(3) data = data_df[["xavg_elem","yavg_elem","ausrichtung"]] #print(data) data = StandardScaler().fit_transform(data) # ############################################################################# # Compute DBSCAN db = DBSCAN(eps=0.075, min_samples=1, metric="euclidean").fit(data) #core_samples_mask = np.zeros_like(db.labels_, dtype=bool) #core_samples_mask[db.core_sample_indices_] = True labels = db.labels_ print(data[labels == 0]) data_df["cluster"] = labels # Number of clusters in labels, ignoring noise if present. n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0) n_noise_ = list(labels).count(-1) print('Estimated number of clusters: %d' % n_clusters_) print('Estimated number of noise points: %d' % n_noise_) print("Silhouette Coefficient: %0.3f" % metrics.silhouette_score(data, labels)) # ############################################################################# # Plot result """ort matplotlib.pyplot as plt # Black removed and is used for noise instead. unique_labels = set(labels) colors = [plt.cm.Spectral(each) for each in np.linspace(0, 1, len(unique_labels))] for k, col in zip(unique_labels, colors): if k == -1: # Black used for noise. col = [0, 0, 0, 1] class_member_mask = (labels == k) xy = data[class_member_mask & core_samples_mask] plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col), markeredgecolor='k', markersize=14) xy = data[class_member_mask & ~core_samples_mask] plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col), markeredgecolor='k', markersize=6) plt.title('Estimated number of clusters: %d' % n_clusters_) plt.show()""" #print(data_df.head(3)) #data_df.to_csv("values_clusteredfromPDF_GV12.csv") data_df.groupby('cluster')['element'].apply(' '.join).reset_index().to_csv("values_clusteredfromHTML_layout_LH.csv",sep=";") def get_average_xy(list_input): csv_name = "temporary/list_to_csv_with_avg_points.csv" new_list = [] resultFile = open(csv_name, 'w') wr = csv.writer(resultFile, delimiter=";") wr.writerow(["element", "xavg_elem","yavg_elem", "ausrichtung"]) for element in list_input: xavg_elem = 0 yavg_elem = 0 y_min = 1000000 y_max = 0 x_min = 1000000 x_max = 0 for blub in element: xavg_elem += (float(blub[0]) + float(blub[2]))/2 yavg_elem += (float(blub[1]) + float(blub[3]))/2 if float(blub[1]) < y_min: y_min = float(blub[1]) #print("y_min:",y_min) if float(blub[0]) < x_min: x_min = float(blub[0]) if float(blub[3]) > y_max: y_max = float(blub[3]) if float(blub[2]) > x_max: x_max = float(blub[2]) if x_max-x_min > y_max-y_min: ausrichtung = 0 else: ausrichtung = 1 xavg_elem = xavg_elem/len(element) #print(xavg_elem) yavg_elem = yavg_elem/len(element) #element.extend([xavg_elem, yavg_elem]) #print(element) #new_list.append(element) wr.writerow([element,xavg_elem,yavg_elem, ausrichtung]) resultFile.close() #print(new_list) return csv_name #cluster(33,33) file = "/home/bscheibel/PycharmProjects/dxf_reader/drawings/5152166_Rev04.html" #file = "/home/bscheibel/PycharmProjects/dxf_reader/drawings/5129275_Rev01-GV12.html" #result = order_bounding_boxes_in_each_block.get_bound_box(file) #get_average_xy(result) cluster(33,33)