master-thesis/RecipeAnalysis/AdjacencyMatrix.ipynb

1 line
9.4 KiB
Plaintext
Raw Normal View History

{"cells":[{"cell_type":"markdown","metadata":{},"source":["# Adjacency Matrix"]},{"cell_type":"code","execution_count":3,"metadata":{},"outputs":[],"source":"import numpy as np\n\nfrom scipy.sparse import csr_matrix, lil_matrix, coo_matrix"},{"cell_type":"code","execution_count":2,"metadata":{},"outputs":[{"ename":"SyntaxError","evalue":"invalid syntax (<ipython-input-2-b94eb869690f>, line 63)","output_type":"error","traceback":["\u001b[0;36m File \u001b[0;32m\"<ipython-input-2-b94eb869690f>\"\u001b[0;36m, line \u001b[0;32m63\u001b[0m\n\u001b[0;31m if label in self._label_document_count[label] += 1\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"]}],"source":"class adj_matrix(object):\n def __init__(self, symmetric_indices=False):\n \n self._sym = symmetric_indices\n if not symmetric_indices:\n self._x_labels = []\n self._y_labels = []\n\n self._x_label_index={}\n self._y_label_index={}\n \n else:\n self._labels = []\n self._label_index={}\n \n self._x = []\n self._y = []\n self._data = []\n \n self._mat = None\n self._csr = None\n\n # for a TF-IDF like approach we need also a counter how frequently ingredients\n # and actions appear in documents. \n\n self._current_document_labels = set()\n self._label_document_count = {}\n \n self._document_count = 0\n \n # building type dependend functions:\n self._build_funcs()\n \n def _get_ix(self, label):\n i = self._x_label_index.get(label)\n if i is None:\n i = len(self._x_labels)\n self._x_labels.append(label)\n self._x_label_index[label] = i\n return i\n \n def _get_iy(self, label):\n i = self._y_label_index.get(label)\n if i is None:\n i = len(self._y_labels)\n self._y_labels.append(label)\n self._y_label_index[label] = i\n return i\n \n def _get_i(self, label):\n i = self._label_index.get(label)\n if i is None:\n i = len(self._labels)\n self._labels.append(label)\n self._label_index[label] = i\n return i\n\n def _end_document(self):\n self._document_count += 1\n\n # adding all seen labels to our counter:\n for label in self._current_document_labels:\n self._label_document_count[label] += 1\n else:\n self._label_document_count[label] = 1\n \n self._current_document_labels = set()\n \n def apply_threshold(self, min_count=5):\n csr = self.get_csr()\n\n new_x = []\n new_y = []\n new_data = []\n\n for i in range(len(self._data)):\n if csr[self._x[i],self._y[i]] >= min_count:\n new_x.append(self._x[i])\n new_y.append(self._y[i])\n new_data.append(self._data[i])\n \n self._x = new_x\n self._y = new_y\n self._data = new_data\n\n \n def next_document(self):\n self._end_document()\n\n \n def add_entry(self, x, y, data):\n \n if self._sym:\n ix = self._get_i(x)\n iy = self._get_i(y)\n \n else:\n ix = self._get_ix(x)\n iy = self._get_iy(y)\n \n self._x.append(ix)\n self._y.append(iy)\n self._data.append(data)\n\n self._current_document_labels.add(x)\n self._current_document_labels.add(y)\n \n def compile(self):\n self._csr = None\n self._csr = self.get_csr()\n if self._sym:\n self._np_labels = np.array(self._labels)\n else:\n self._np_x_labels = np.array(self._x_labels)\n self._np_y_labels = np.array(self._y_labels)\n \n \n def compile_to_mat(self):\n if self._sym:\n sx = le