diff --git "a/Week13_\341\204\207\341\205\251\341\206\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\242\341\206\250\341\204\214\341\205\242\341\204\213\341\205\263\341\206\253.ipynb" "b/Week13_\341\204\207\341\205\251\341\206\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\242\341\206\250\341\204\214\341\205\242\341\204\213\341\205\263\341\206\253.ipynb" new file mode 100644 index 0000000..6535bc6 --- /dev/null +++ "b/Week13_\341\204\207\341\205\251\341\206\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\242\341\206\250\341\204\214\341\205\242\341\204\213\341\205\263\341\206\253.ipynb" @@ -0,0 +1,734 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 데이터 전처리" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1482535, 8)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
train_idnameitem_condition_idcategory_namebrand_namepriceshippingitem_description
00MLB Cincinnati Reds T Shirt Size XL3Men/Tops/T-shirtsNaN10.01No description yet
11Razer BlackWidow Chroma Keyboard3Electronics/Computers & Tablets/Components & P...Razer52.00This keyboard is in great condition and works ...
22AVA-VIV Blouse1Women/Tops & Blouses/BlouseTarget10.01Adorable top with a hint of lace and a key hol...
\n", + "
" + ], + "text/plain": [ + " train_id name item_condition_id \\\n", + "0 0 MLB Cincinnati Reds T Shirt Size XL 3 \n", + "1 1 Razer BlackWidow Chroma Keyboard 3 \n", + "2 2 AVA-VIV Blouse 1 \n", + "\n", + " category_name brand_name price \\\n", + "0 Men/Tops/T-shirts NaN 10.0 \n", + "1 Electronics/Computers & Tablets/Components & P... Razer 52.0 \n", + "2 Women/Tops & Blouses/Blouse Target 10.0 \n", + "\n", + " shipping item_description \n", + "0 1 No description yet \n", + "1 0 This keyboard is in great condition and works ... \n", + "2 1 Adorable top with a hint of lace and a key hol... " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.linear_model import Ridge , LogisticRegression\n", + "from sklearn.model_selection import train_test_split , cross_val_score\n", + "from sklearn.feature_extraction.text import CountVectorizer , TfidfVectorizer\n", + "import pandas as pd\n", + "\n", + "mercari_df= pd.read_csv('mercari_train.tsv',sep='\\t')\n", + "print(mercari_df.shape)\n", + "mercari_df.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 1482535 entries, 0 to 1482534\n", + "Data columns (total 8 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 train_id 1482535 non-null int64 \n", + " 1 name 1482535 non-null object \n", + " 2 item_condition_id 1482535 non-null int64 \n", + " 3 category_name 1476208 non-null object \n", + " 4 brand_name 849853 non-null object \n", + " 5 price 1482535 non-null float64\n", + " 6 shipping 1482535 non-null int64 \n", + " 7 item_description 1482529 non-null object \n", + "dtypes: float64(1), int64(3), object(4)\n", + "memory usage: 90.5+ MB\n", + "None\n" + ] + } + ], + "source": [ + "print(mercari_df.info())" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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43Q6Td++fU1eXp7Xeo4ePWqGDh1qmjZtalwul3nwwQfNsWPHvGq2bdtmbr75ZuN0Os2VV15pZsyYUaWfd99911x77bXG4XCYrl27mlWrVnmN16SXc+FybwAA6qamr6F+xpz2Mb+4qNxut0JCQlRSUiKXy1Uv69y0aZOeWrFDLaO7SJKO7t2p5++KUVxcXL2sHwCAhqCmr6F8VxQAALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANnwebgwcP6q9//atatmyp4OBgxcTEaMuWLda4MUaTJ09W69atFRwcrMTERO3evdtrHUVFRRo2bJhcLpdCQ0OVkpKi48ePe9Vs375dt9xyi4KCghQVFaWZM2dW6eW9995Tp06dFBQUpJiYGK1evdprvCa9AAAA3/FpsPn555910003KTAwUB9//LF27typl156Sc2bN7dqZs6cqVdffVWLFi1SZmammjRpoqSkJJ08edKqGTZsmHJzc7V27VqtXLlSGzZs0MiRI61xt9utfv36qW3btsrKytKsWbM0depUvf7661bNxo0bNXToUKWkpGjr1q0aOHCgBg4cqJycnFr1AgAAfMj40Pjx483NN9981nGPx2MiIiLMrFmzrGXFxcXG6XSad955xxhjzM6dO40ks3nzZqvm448/Nn5+fubgwYPGGGMWLFhgmjdvbkpLS7223bFjR+v+PffcY5KTk722Hx8fbx555JEa93I+JSUlRpIpKSmpUX1NZGZmmsQJb5jBr200g1/baBInvGEyMzPrbf0AADQENX0N9ekRmw8//FC9e/fWf/7nfyosLEw9evTQP//5T2t87969ys/PV2JiorUsJCRE8fHxysjIkCRlZGQoNDRUvXv3tmoSExPl7++vzMxMq6ZPnz5yOBxWTVJSkvLy8vTzzz9bNadvp7Kmcjs16eVMpaWlcrvdXjcAAHDx+DTY/PDDD1q4cKGuueYaffLJJ3rsscf0xBNPaOnSpZKk/Px8SVJ4eLjX48LDw62x/Px8hYWFeY03atRILVq08Kqpbh2nb+NsNaePn6+XM02fPl0hISHWLSoq6ny/EgAAcAF8Gmw8Ho969uypF154QT169NDIkSM1YsQILVq0yJdt1ZuJEyeqpKTEuh04cMDXLQEAYGs+DTatW7dWly5dvJZ17txZ+/fvlyRFRERIkgoKCrxqCgoKrLGIiAgVFhZ6jZ86dUpFRUVeNdWt4/RtnK3m9PHz9XImp9Mpl8vldQMAABePT4PNTTfdpLy8PK9l3333ndq2bStJio6OVkREhNLT061xt9utzMxMJSQkSJISEhJUXFysrKwsq2bdunXyeDyKj4+3ajZs2KDy8nKrZu3aterYsaN1BVZCQoLXdiprKrdTk14AAIBv+TTYjB07Vl9//bVeeOEFff/993r77bf1+uuvKzU1VZLk5+enMWPG6LnnntOHH36oHTt26P7771dkZKQGDhwo6bcjPP3799eIESO0adMmffXVVxo1apSGDBmiyMhISdK9994rh8OhlJQU5ebmavny5XrllVeUlpZm9TJ69GitWbNGL730knbt2qWpU6dqy5YtGjVqVI17AQAAPnaJrtI6q48++sh069bNOJ1O06lTJ/P66697jXs8HjNp0iQTHh5unE6n6du3r8nLy/OqOXr0qBk6dKhp2rSpcblc5sEHHzTHjh3zqtm2bZu5+eabjdPpNFdeeaWZMWNGlV7effddc+211xqHw2G6du1qVq1aVetezoXLvQEAqJuavob6GWOMr8PV74Xb7VZISIhKSkrq7XybTZs26akVO9Qy+rdzlY7u3ann74pRXFxcvawfAICGoKavoT7/SgUAAID6QrABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2Uadg0759ex09erTK8uLiYrVv3/6CmwIAAKiLOgWbffv2qaKiosry0tJSHTx48IKbAgAAqItGtSn+8MMPrZ8/+eQThYSEWPcrKiqUnp6udu3a1VtzAAAAtVGrYDNw4EBJkp+fn4YPH+41FhgYqHbt2umll16qt+YAAABqo1bBxuPxSJKio6O1efNmtWrV6qI0BQAAUBe1CjaV9u7dW999AAAAXLA6BRtJSk9PV3p6ugoLC60jOZXefPPNC24MAACgtuoUbKZNm6ZnnnlGvXv3VuvWreXn51fffQEAANRanYLNokWLtGTJEt1333313Q8AAECd1elzbMrKynTjjTfWdy8AAAAXpE7B5uGHH9bbb79d370AAABckDq9FXXy5Em9/vrr+vTTT3XdddcpMDDQa3z27Nn10hwAAEBt1CnYbN++XbGxsZKknJwcrzFOJAYAAL5Sp2Dz2Wef1XcfAAAAF6xO59gAAAA0RHU6YnP77bef8y2ndevW1bkhAACAuqpTsKk8v6ZSeXm5srOzlZOTU+XLMQEAAC6VOgWbOXPmVLt86tSpOn78+AU1BAAAUFf1eo7NX//6V74nCgAA+Ey9BpuMjAwFBQXV5yoBAABqrE5vRQ0aNMjrvjFGhw8f1pYtWzRp0qR6aQwAAKC26hRsQkJCvO77+/urY8eOeuaZZ9SvX796aQwAAKC26hRsFi9eXN99AAAAXLA6BZtKWVlZ+vbbbyVJXbt2VY8ePeqlKQAAgLqoU7ApLCzUkCFDtH79eoWGhkqSiouLdfvtt2vZsmW64oor6rNHAACAGqnTVVGPP/64jh07ptzcXBUVFamoqEg5OTlyu9164okn6rtHAACAGqnTEZs1a9bo008/VefOna1lXbp00fz58zl5GAAA+Eydjth4PB4FBgZWWR4YGCiPx3PBTQEAANRFnYLNH/7wB40ePVqHDh2ylh08eFBjx45V37596605AACA2qhTsJk3b57cbrfatWunq6++WldffbWio6Pldrs1d+7c+u4RAACgRup0jk1UVJS++eYbffrpp9q1a5ckqXPnzkpMTKzX5gAAAGqjVkds1q1bpy5dusjtdsvPz0//8R//occff1yPP/64rr/+enXt2lVffPHFxeoVAADgnGoVbF5++WWNGDFCLperylhISIgeeeQRzZ49u96aAwAAqI1aBZtt27apf//+Zx3v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W83q1atNq1atzMSJEy/5fKZMmWK6du3q1euRI0es8UcffdRERUWZ9PR0s2XLFnPDDTeYG2+8sUHOpVJhYaHXfNauXWskmc8++8wY0/D3z+rVq81TTz1l/v3vfxtJZsWKFV7jM2bMMCEhIeb9998327ZtM3/+859NdHS0OXHihFXTv39/0717d/P111+bL774wnTo0MEMHTrUGi8pKTHh4eFm2LBhJicnx7zzzjsmODjYvPbaa5d8TsXFxSYxMdEsX77c7Nq1y2RkZJi4uDjTq1cvr3W0bdvWPPPMM1777fS/u4Y0J2OMGT58uOnfv79Xv0VFRV41DWk/nW8+p8/j8OHD5s033zR+fn5mz549Vk1D2kc1ea6uj+e3H374wTRu3NikpaWZnTt3mrlz55qAgACzZs2aC54DweYyFhcXZ1JTU637FRUVJjIy0kyfPt2HXdVMYWGhkWQ+//xza9mtt95qRo8efdbHrF692vj7+5v8/Hxr2cKFC43L5TKlpaUXs90qpkyZYrp3717tWHFxsQkMDDTvvfeetezbb781kkxGRoYxpmHN5WxGjx5trr76auPxeIwxl9f+OfMFxuPxmIiICDNr1ixrWXFxsXE6neadd94xxhizc+dOI8ls3rzZqvn444+Nn5+fOXjwoDHGmAULFpjmzZt7zWf8+PGmY8eOF3lGVedUnU2bNhlJ5scff7SWtW3b1syZM+esj2locxo+fLi58847z/qYhryfarKP7rzzTvOHP/zBa1lD3kdnPlfX1/Pbk08+abp27eq1rcGDB5ukpKQL7pm3oi5TZWVlysrKUmJiorXM399fiYmJysjI8GFnNVNSUiJJatGihdfyt956S61atVK3bt00ceJE/frrr9ZYRkaGYmJivD4QMSkpSW63W7m5uZem8dPs3r1bkZGRat++vYYNG6b9+/dLkrKyslReXu61bzp16qQ2bdpY+6ahzeVMZWVl+te//qWHHnrI6wtbL6f9c7q9e/cqPz/fa5+EhIQoPj7ea5+Ehoaqd+/eVk1iYqL8/f2VmZlp1fTp00cOh8OqSUpKUl5enn7++edLNJuzKykpkZ+fX5XvpJsxY4ZatmypHj16aNasWV5vCTTEOa1fv15hYWHq2LGjHnvsMR09etQau5z3U0FBgVatWqWUlJQqYw11H535XF1fz28ZGRle66isqY/XLz55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1KiRr9sBcIEINgB+t8rKyuRwOHzdBoB6xFtRAGzjtttu06hRozRq1CiFhISoVatWmjRpkir//9auXTs9++yzuv/+++VyuTRy5Mhq34rKzc3VHXfcIZfLpWbNmumWW27Rnj17rPE33nhDnTt3VlBQkDp16qQFCxZc6qkCOAuOuwKwlaVLlyolJUWbNm3Sli1bNHLkSLVp00YjRoyQJP3jH//Q5MmTNWXKlGoff/DgQfXp00e33Xab1q1bJ5fLpa+++kqnTp2SJL311luaPHmy5s2bpx49emjr1q0aMWKEmjRpouHDh1+yeQKoHm9FAbCN2267TYWFhcrNzZWfn58kacKECfrwww+1c+dOtWvXTj169NCKFSusx+zbt0/R0dHaunWrYmNj9fe//13Lli1TXl6eAgMDq2yjQ4cOevbZZzV06FBr2XPPPafVq1dr48aNF3+SAM6Jt6IA2MoNN9xghRpJSkhI0O7du1VRUSFJ6t279zkfn52drVtuuaXaUPPLL79oz549SklJUdOmTa3bc8895/VWFQDf4a0oAL8rTZo0Oed4cHDwWceOHz8uSfrnP/+p+Ph4r7GAgIALbw7ABSPYALCVzMxMr/tff/21rrnmmhoHj+uuu05Lly5VeXl5laM24eHhioyM1A8//KBhw4bVW88A6g9vRQGwlf379ystLU15eXl65513NHfuXI0ePbrGjx81apTcbreGDBmiLVu2aPfu3frf//1f5eXlSZKmTZum6dOn69VXX9V3332nHTt2aPHixZo9e/bFmhKAWuCIDQBbuf/++3XixAnFxcUpICBAo0eP1siRI2v8+JYtW2rdunUaN26cbr31VgUEBCg2NlY33XSTJOnhhx9W48aNNWvWLI0bN05NmjRRTEyMxowZc5FmBKA2uCoKgG3cdtttio2N1csvv+zrVgD4CG9FAQAA2yDYAAAA2+CtKAAAYBscsQEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALbx/wP4ZZESSPJaxwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "y_train_df = mercari_df['price']\n", + "plt.figure(figsize=(6,4))\n", + "sns.histplot(y_train_df, bins=100)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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LEz79u0z/ZgBAEDz1OSD1c6dOxUfH689e/YoKytLVVVVioyMVHl5uVEzZcoUffTRR1q/fr127typ06dP67HHHjPGq6urNXLkSFVWVmr37t1avXq1Vq1apeTkZKPmxIkTGjlypIYOHar8/HwlJibq2Wef1datW42adevWKSkpSbNmzdKBAwfUp08fRUVFqbi4uHF+DAAA0KQ1+XusMjMzHeZXrVolX19f5eXlafDgwSotLdXvf/97paen68EHH5QkrVy5Ut26ddOePXt03333adu2bfriiy/0ySefyM/PTyEhIZo7d65eeOEFzZ49W25ubkpLS1NwcLDmz58vSerWrZv++te/6p133lFUVJQkacGCBRo/fryefvppSVJaWpo2b96sFStW6MUXX2zEXwUAADRFTf6M1b8rLS2VJPn4+EiS8vLyVFVVpYiICKOma9eu6tChg3JyciRJOTk56tWrl/z8/v8naKKiomSz2VRQUGDUXLqN2prabVRWViovL8+hxsXFRREREUbNv6uoqJDNZnOYAADAzatZBauamholJibq/vvvV8+ePSVJVqtVbm5u8vb2dqj18/OT1Wo1ai4NVbXjtWP11dhsNv3www/6xz/+oerq6jprarfx71JSUuTl5WVMQUFB13fgAACgWWhWwSo+Pl5HjhzR2rVrnd3KVZk+fbpKS0uN6dSpU85uCQAANKAmf49VrYSEBG3atEm7du3SnXfeaSz39/dXZWWlSkpKHM5aFRUVyd/f36j596f3ap8avLTm358kLCoqkqenp1q1aqUWLVqoRYsWddbUbuPfubu7y93d/foOGE7Ro3eIzpw5U28NL10EAPyYJh+s7Ha7Jk2apA0bNmjHjh0KDg52GO/bt69atmyp7OxsjRo1SpJUWFiokydPKjw8XJIUHh6u1157TcXFxfL19ZUkZWVlydPTU927dzdqtmzZ4rDtrKwsYxtubm7q27evsrOzFR0dLelflyazs7OVkJDQYMePxnXmzBleuggAuG5NPljFx8crPT1df/nLX9SmTRvjfiYvLy+1atVKXl5eiouLU1JSknx8fOTp6alJkyYpPDxc9913nyQpMjJS3bt315NPPql58+bJarVqxowZio+PN84oPffcc1q6dKmmTZumZ555Rtu3b9eHH36ozZs3G70kJSUpNjZWoaGh6t+/vxYuXKjy8nLj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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "\n", + "y_train_df = np.log1p(y_train_df)\n", + "sns.histplot(y_train_df, bins=50)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 2.397895\n", + "1 3.970292\n", + "2 2.397895\n", + "Name: price, dtype: float64" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mercari_df['price'] = np.log1p(mercari_df['price'])\n", + "mercari_df['price'].head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shipping 값 유형:\n", + " shipping\n", + "0 819435\n", + "1 663100\n", + "Name: count, dtype: int64\n", + "item_condition_id 값 유형:\n", + " item_condition_id\n", + "1 640549\n", + "3 432161\n", + "2 375479\n", + "4 31962\n", + "5 2384\n", + "Name: count, dtype: int64\n" + ] + } + ], + "source": [ + "print('Shipping 값 유형:\\n',mercari_df['shipping'].value_counts())\n", + "print('item_condition_id 값 유형:\\n',mercari_df['item_condition_id'].value_counts())\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "82489" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "boolean_cond= mercari_df['item_description']=='No description yet'\n", + "mercari_df[boolean_cond]['item_description'].count()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "대분류 유형 :\n", + " cat_dae\n", + "Women 664385\n", + "Beauty 207828\n", + "Kids 171689\n", + "Electronics 122690\n", + "Men 93680\n", + "Home 67871\n", + "Vintage & Collectibles 46530\n", + "Other 45351\n", + "Handmade 30842\n", + "Sports & Outdoors 25342\n", + "Other_Null 6327\n", + "Name: count, dtype: int64\n", + "중분류 갯수 : 114\n", + "소분류 갯수 : 871\n" + ] + } + ], + "source": [ + "# apply lambda에서 호출되는 대,중,소 분할 함수 생성, 대,중,소 값을 리스트 반환\n", + "def split_cat(category_name):\n", + " try:\n", + " return category_name.split('/')\n", + " except:\n", + " return ['Other_Null' , 'Other_Null' , 'Other_Null']\n", + "\n", + "# 위의 split_cat( )을 apply lambda에서 호출하여 대,중,소 컬럼을 mercari_df에 생성. \n", + "mercari_df['cat_dae'], mercari_df['cat_jung'], mercari_df['cat_so'] = \\\n", + " zip(*mercari_df['category_name'].apply(lambda x : split_cat(x)))\n", + "\n", + "# 대분류만 값의 유형과 건수를 살펴보고, 중분류, 소분류는 값의 유형이 많으므로 분류 갯수만 추출\n", + "print('대분류 유형 :\\n', mercari_df['cat_dae'].value_counts())\n", + "print('중분류 갯수 :', mercari_df['cat_jung'].nunique())\n", + "print('소분류 갯수 :', mercari_df['cat_so'].nunique())\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "train_id 0\n", + "name 0\n", + "item_condition_id 0\n", + "category_name 0\n", + "brand_name 0\n", + "price 0\n", + "shipping 0\n", + "item_description 0\n", + "cat_dae 0\n", + "cat_jung 0\n", + "cat_so 0\n", + "dtype: int64" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mercari_df['brand_name'] = mercari_df['brand_name'].fillna(value='Other_Null')\n", + "mercari_df['category_name'] = mercari_df['category_name'].fillna(value='Other_Null')\n", + "mercari_df['item_description'] = mercari_df['item_description'].fillna(value='Other_Null')\n", + "\n", + "# 각 컬럼별로 Null값 건수 확인. 모두 0가 나와야 합니다.\n", + "mercari_df.isnull().sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 피처 인코딩과 피처 벡터화" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "brand name 의 유형 건수 : 4810\n", + "brand name sample 5건 : \n", + " brand_name\n", + "Other_Null 632682\n", + "PINK 54088\n", + "Nike 54043\n", + "Victoria's Secret 48036\n", + "LuLaRoe 31024\n", + "Name: count, dtype: int64\n" + ] + } + ], + "source": [ + "print('brand name 의 유형 건수 :', mercari_df['brand_name'].nunique())\n", + "print('brand name sample 5건 : \\n', mercari_df['brand_name'].value_counts()[:5])" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "name 의 종류 갯수 : 1225273\n", + "name sample 7건 : \n", + " 0 MLB Cincinnati Reds T Shirt Size XL\n", + "1 Razer BlackWidow Chroma Keyboard\n", + "2 AVA-VIV Blouse\n", + "3 Leather Horse Statues\n", + "4 24K GOLD plated rose\n", + "5 Bundled items requested for Ruie\n", + "6 Acacia pacific tides santorini top\n", + "Name: name, dtype: object\n" + ] + } + ], + "source": [ + "print('name 의 종류 갯수 :', mercari_df['name'].nunique())\n", + "print('name sample 7건 : \\n', mercari_df['name'][:7])" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "item_description 평균 문자열 개수: 145.71139703278507\n" + ] + }, + { + "data": { + "text/plain": [ + "0 No description yet\n", + "1 This keyboard is in great condition and works like it came out of the box. All of the ports are tested and work perfectly. The lights are customizable via the Razer Synapse app on your PC.\n", + "Name: item_description, dtype: object" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.set_option('max_colwidth', 200)\n", + "\n", + "# item_description의 평균 문자열 개수\n", + "print('item_description 평균 문자열 개수:',mercari_df['item_description'].str.len().mean())\n", + "\n", + "mercari_df['item_description'][:2]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "name vectorization shape: (1482535, 105757)\n", + "item_description vectorization shape: (1482535, 50000)\n" + ] + } + ], + "source": [ + "# name 속성에 대한 feature vectorization 변환\n", + "cnt_vec = CountVectorizer()\n", + "X_name = cnt_vec.fit_transform(mercari_df.name)\n", + "\n", + "# item_description 에 대한 feature vectorization 변환 \n", + "tfidf_descp = TfidfVectorizer(max_features = 50000, ngram_range= (1,3) , stop_words='english')\n", + "X_descp = tfidf_descp.fit_transform(mercari_df['item_description'])\n", + "\n", + "print('name vectorization shape:',X_name.shape)\n", + "print('item_description vectorization shape:',X_descp.shape)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.preprocessing import LabelBinarizer\n", + "\n", + "# brand_name, item_condition_id, shipping 각 피처들을 희소 행렬 원-핫 인코딩 변환\n", + "lb_brand_name= LabelBinarizer(sparse_output=True)\n", + "X_brand = lb_brand_name.fit_transform(mercari_df['brand_name'])\n", + "\n", + "lb_item_cond_id = LabelBinarizer(sparse_output=True)\n", + "X_item_cond_id = lb_item_cond_id.fit_transform(mercari_df['item_condition_id'])\n", + "\n", + "lb_shipping= LabelBinarizer(sparse_output=True)\n", + "X_shipping = lb_shipping.fit_transform(mercari_df['shipping'])\n", + "\n", + "# cat_dae, cat_jung, cat_so 각 피처들을 희소 행렬 원-핫 인코딩 변환\n", + "lb_cat_dae = LabelBinarizer(sparse_output=True)\n", + "X_cat_dae= lb_cat_dae.fit_transform(mercari_df['cat_dae'])\n", + "\n", + "lb_cat_jung = LabelBinarizer(sparse_output=True)\n", + "X_cat_jung = lb_cat_jung.fit_transform(mercari_df['cat_jung'])\n", + "\n", + "lb_cat_so = LabelBinarizer(sparse_output=True)\n", + "X_cat_so = lb_cat_so.fit_transform(mercari_df['cat_so'])" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " \n", + "X_brand_shape:(1482535, 4810), X_item_cond_id shape:(1482535, 5)\n", + "X_shipping shape:(1482535, 1), X_cat_dae shape:(1482535, 11)\n", + "X_cat_jung shape:(1482535, 114), X_cat_so shape:(1482535, 871)\n" + ] + } + ], + "source": [ + "print(type(X_brand), type(X_item_cond_id), type(X_shipping))\n", + "print('X_brand_shape:{0}, X_item_cond_id shape:{1}'.format(X_brand.shape, X_item_cond_id.shape))\n", + "print('X_shipping shape:{0}, X_cat_dae shape:{1}'.format(X_shipping.shape, X_cat_dae.shape))\n", + "print('X_cat_jung shape:{0}, X_cat_so shape:{1}'.format(X_cat_jung.shape, X_cat_so.shape))" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " (1482535, 161569)\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from scipy.sparse import hstack\n", + "import gc\n", + "\n", + "sparse_matrix_list = (X_name, X_descp, X_brand, X_item_cond_id,\n", + " X_shipping, X_cat_dae, X_cat_jung, X_cat_so)\n", + "\n", + "# 사이파이 sparse 모듈의 hstack 함수를 이용하여 앞에서 인코딩과 Vectorization을 수행한 데이터 셋을 모두 결합. \n", + "X_features_sparse= hstack(sparse_matrix_list).tocsr()\n", + "print(type(X_features_sparse), X_features_sparse.shape)\n", + "\n", + "# 데이터 셋이 메모리를 많이 차지하므로 사용 용도가 끝났으면 바로 메모리에서 삭제. \n", + "del X_features_sparse\n", + "gc.collect()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 릿지 회귀 모델 구축 및 평가" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "def rmsle(y , y_pred):\n", + " # underflow, overflow를 막기 위해 log가 아닌 log1p로 rmsle 계산 \n", + " return np.sqrt(np.mean(np.power(np.log1p(y) - np.log1p(y_pred), 2)))\n", + "\n", + "def evaluate_org_price(y_test , preds): \n", + " \n", + " # 원본 데이터는 log1p로 변환되었으므로 exmpm1으로 원복 필요. \n", + " preds_exmpm = np.expm1(preds)\n", + " y_test_exmpm = np.expm1(y_test)\n", + " \n", + " # rmsle로 RMSLE 값 추출\n", + " rmsle_result = rmsle(y_test_exmpm, preds_exmpm)\n", + " return rmsle_result" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "import gc \n", + "from scipy.sparse import hstack\n", + "\n", + "def model_train_predict(model,matrix_list):\n", + " # scipy.sparse 모듈의 hstack 을 이용하여 sparse matrix 결합\n", + " X= hstack(matrix_list).tocsr() \n", + " \n", + " X_train, X_test, y_train, y_test=train_test_split(X, mercari_df['price'], \n", + " test_size=0.2, random_state=156)\n", + " \n", + " # 모델 학습 및 예측\n", + " model.fit(X_train , y_train)\n", + " preds = model.predict(X_test)\n", + " \n", + " del X , X_train , X_test , y_train \n", + " gc.collect()\n", + " \n", + " return preds , y_test" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Item Description을 제외했을 때 rmsle 값: 0.49839668011134325\n", + "Item Description을 포함한 rmsle 값: 0.4681346606101226\n" + ] + } + ], + "source": [ + "linear_model = Ridge(solver = \"lsqr\", fit_intercept=False)\n", + "\n", + "sparse_matrix_list = (X_name, X_brand, X_item_cond_id,\n", + " X_shipping, X_cat_dae, X_cat_jung, X_cat_so)\n", + "linear_preds , y_test = model_train_predict(model=linear_model ,matrix_list=sparse_matrix_list)\n", + "print('Item Description을 제외했을 때 rmsle 값:', evaluate_org_price(y_test , linear_preds))\n", + "\n", + "sparse_matrix_list = (X_descp, X_name, X_brand, X_item_cond_id,\n", + " X_shipping, X_cat_dae, X_cat_jung, X_cat_so)\n", + "linear_preds , y_test = model_train_predict(model=linear_model , matrix_list=sparse_matrix_list)\n", + "print('Item Description을 포함한 rmsle 값:', evaluate_org_price(y_test ,linear_preds))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### LightGBM 회귀 모델 구축과 앙상블을 이용한 최종 예측 평가" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 41.930892 seconds.\n", + "You can set `force_row_wise=true` to remove the overhead.\n", + "And if memory is not enough, you can set `force_col_wise=true`.\n", + "[LightGBM] [Info] Total Bins 1068421\n", + "[LightGBM] [Info] Number of data points in the train set: 1186028, number of used features: 65338\n", + "[LightGBM] [Info] Start training from score 2.979514\n", + "LightGBM rmsle 값: 0.4562664499998407\n" + ] + } + ], + "source": [ + "from lightgbm import LGBMRegressor\n", + "\n", + "sparse_matrix_list = (X_descp, X_name, X_brand, X_item_cond_id,\n", + " X_shipping, X_cat_dae, X_cat_jung, X_cat_so)\n", + "\n", + "lgbm_model = LGBMRegressor(n_estimators=200, learning_rate=0.5, num_leaves=125, random_state=156)\n", + "lgbm_preds , y_test = model_train_predict(model = lgbm_model , matrix_list=sparse_matrix_list)\n", + "print('LightGBM rmsle 값:', evaluate_org_price(y_test , lgbm_preds))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LightGBM과 Ridge를 ensemble한 최종 rmsle 값: 0.44656693019217275\n" + ] + } + ], + "source": [ + "preds = lgbm_preds * 0.45 + linear_preds * 0.55\n", + "print('LightGBM과 Ridge를 ensemble한 최종 rmsle 값:', evaluate_org_price(y_test , preds))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:base] *", + "language": "python", + "name": "conda-base-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.2" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git "a/Week13_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\242\341\206\250\341\204\214\341\205\242\341\204\213\341\205\263\341\206\253 (1).ipynb" "b/Week13_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\242\341\206\250\341\204\214\341\205\242\341\204\213\341\205\263\341\206\253 (1).ipynb" new file mode 100644 index 0000000..eb8e6ff --- /dev/null +++ "b/Week13_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\242\341\206\250\341\204\214\341\205\242\341\204\213\341\205\263\341\206\253 (1).ipynb" @@ -0,0 +1,5058 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "549a3390-f422-406f-af8b-cb76a2c37f3e", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "549a3390-f422-406f-af8b-cb76a2c37f3e", + "outputId": "83d5122b-7c95-4a15-b6ae-1d388dd8b009" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "CountVectorizer Shape: (7862, 1000)\n" + ] + } + ], + "source": [ + "from sklearn.datasets import fetch_20newsgroups\n", + "from sklearn.feature_extraction.text import CountVectorizer\n", + "from sklearn.decomposition import LatentDirichletAllocation\n", + "\n", + "cats = ['rec.motorcycles', 'rec.sport.baseball', 'comp.graphics', 'comp.windows.x',\n", + " 'talk.politics.mideast', 'soc.religion.christian', 'sci.electronics', 'sci.med' ]\n", + "\n", + "news_df= fetch_20newsgroups(subset='all',remove=('headers', 'footers', 'quotes'),\n", + " categories=cats, random_state=0)\n", + "\n", + "count_vect = CountVectorizer(max_df=0.95, max_features=1000, min_df=2, stop_words='english', ngram_range=(1,2))\n", + "feat_vect = count_vect.fit_transform(news_df.data)\n", + "print('CountVectorizer Shape:', feat_vect.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "da512d23-9133-41eb-a28f-1085f18a8092", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 80 + }, + "id": "da512d23-9133-41eb-a28f-1085f18a8092", + "outputId": "cbcf4e9b-174b-4550-fce0-389ffd03f64b" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "LatentDirichletAllocation(n_components=8, random_state=0)" + ], + "text/html": [ + "
LatentDirichletAllocation(n_components=8, random_state=0)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ], + "source": [ + "lda = LatentDirichletAllocation(n_components=8, random_state=0)\n", + "lda.fit(feat_vect)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "f88bb685-b3aa-4b37-acc9-185267336080", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "f88bb685-b3aa-4b37-acc9-185267336080", + "outputId": "ad776b99-875e-4226-b1e4-c43c7c8d728f" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(8, 1000)\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[2.69030238e+02, 1.87798026e+02, 7.09003824e+01, ...,\n", + " 1.22710343e+01, 1.06329639e+02, 7.25995512e+01],\n", + " [1.25091799e-01, 2.46049106e+00, 1.25051902e-01, ...,\n", + " 2.80071176e+02, 1.25089783e-01, 5.05669662e+01],\n", + " [1.33978420e+02, 1.25042012e-01, 9.98277256e+01, ...,\n", + " 1.25092219e-01, 3.31078261e+01, 1.25028398e-01],\n", + " ...,\n", + " [2.98813886e+01, 1.88071366e+01, 1.14748730e+01, ...,\n", + " 1.93022584e+01, 5.29368271e+00, 1.44478198e+01],\n", + " [1.25074899e-01, 1.25105300e-01, 1.25004235e-01, ...,\n", + " 1.03576436e+02, 1.25100535e-01, 7.22276359e+01],\n", + " [1.25172284e-01, 1.03967760e+00, 1.25221075e-01, ...,\n", + " 5.31740996e+01, 1.25025929e-01, 1.25062991e-01]])" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ], + "source": [ + "print(lda.components_.shape)\n", + "lda.components_" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "94485ea2-74c8-4a6e-9525-98d1b23bf8ac", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "94485ea2-74c8-4a6e-9525-98d1b23bf8ac", + "outputId": "f3ece5e3-4ec1-4f6f-a4ea-06a048b750a6" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Topic # 0\n", + "10 year medical health 1993 20 12 disease cancer team patients research number new 11\n", + "Topic # 1\n", + "don just like know think good time ve does way really people want ll right\n", + "Topic # 2\n", + "image file jpeg output program gif images format files color entry use bit 03 02\n", + "Topic # 3\n", + "armenian armenians turkish people said turkey armenia government genocide turks muslim russian greek azerbaijan killed\n", + "Topic # 4\n", + "israel jews dos jewish israeli dos dos arab state people arabs palestinian adl ed anti peace\n", + "Topic # 5\n", + "edu com available graphics ftp window use mail data motif software version pub information server\n", + "Topic # 6\n", + "god people jesus church believe say christ does christian think christians did know bible man\n", + "Topic # 7\n", + "thanks use using does help like display need problem know server screen windows window program\n" + ] + } + ], + "source": [ + "def display_topics(model, feature_names, no_top_words):\n", + " for topic_index, topic in enumerate(model.components_):\n", + " print('Topic #',topic_index)\n", + "\n", + " topic_word_indexes = topic.argsort()[::-1]\n", + " top_indexes=topic_word_indexes[:no_top_words]\n", + "\n", + " feature_concat = ' '.join([feature_names[i] for i in top_indexes])\n", + " print(feature_concat)\n", + "\n", + "feature_names = count_vect.get_feature_names_out()\n", + "\n", + "display_topics(lda, feature_names, 15)" + ] + }, + { + "cell_type": "code", + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hQG0tG22SbvU", + "outputId": "b01a1072-b480-4e42-cb5d-af8ec8230ea4" + }, + "id": "hQG0tG22SbvU", + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Mounted at /content/drive\n" + ] + } + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "3d0f4a9d-cfa7-4aef-99d6-f1a8b3bdc9f7", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 571 + }, + "id": "3d0f4a9d-cfa7-4aef-99d6-f1a8b3bdc9f7", + "outputId": "18d04b06-1445-4b27-fae7-0885b53e9f16" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "0 /content/drive/MyDrive/topics/battery-life_ipod_nano_8gb \n", + "1 /content/drive/MyDrive/topics/display_garmin_nuvi_255W_gps \n", + "2 /content/drive/MyDrive/topics/speed_garmin_nuvi_255W_gps \n", + "3 /content/drive/MyDrive/topics/speed_windows7 \n", + "4 /content/drive/MyDrive/topics/sound_ipod_nano_8gb \n", + "\n", + " opinion_text \n", + "0 short battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ... \n", + "1 3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ... \n", + "2 Another feature on the 255w is a display of the posted speed limit on the road which you are currently on right above your current displayed speed .\\n0 I found myself not even looking at my car speedometer as I could easily see my current speed and the speed limit of my route at a glance .\\n1 ... \n", + "3 Windows 7 is quite simply faster, more stable, boots faster, goes to sleep faster, comes back from sleep faster, manages your files better and on top of that it's beautiful to look at and easy to use .\\n0 , faster about 20% to 30% faster at running applications than my Vista , seriously\\n1 ... \n", + "4 headphone jack i got a clear case for it and it i got a clear case for it and it like prvents me from being able to put the jack all the way in so the sound can b messsed up or i can get it in there and its playing well them go to move or something and it slides out .\\n0 Picture and sound quality are excellent for this typ of devic .\\n1 ... " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
filenameopinion_text
0/content/drive/MyDrive/topics/battery-life_ipod_nano_8gbshort battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ...
1/content/drive/MyDrive/topics/display_garmin_nuvi_255W_gps3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ...
2/content/drive/MyDrive/topics/speed_garmin_nuvi_255W_gpsAnother feature on the 255w is a display of the posted speed limit on the road which you are currently on right above your current displayed speed .\\n0 I found myself not even looking at my car speedometer as I could easily see my current speed and the speed limit of my route at a glance .\\n1 ...
3/content/drive/MyDrive/topics/speed_windows7Windows 7 is quite simply faster, more stable, boots faster, goes to sleep faster, comes back from sleep faster, manages your files better and on top of that it's beautiful to look at and easy to use .\\n0 , faster about 20% to 30% faster at running applications than my Vista , seriously\\n1 ...
4/content/drive/MyDrive/topics/sound_ipod_nano_8gbheadphone jack i got a clear case for it and it i got a clear case for it and it like prvents me from being able to put the jack all the way in so the sound can b messsed up or i can get it in there and its playing well them go to move or something and it slides out .\\n0 Picture and sound quality are excellent for this typ of devic .\\n1 ...
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "document_df", + "summary": "{\n \"name\": \"document_df\",\n \"rows\": 51,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 51,\n \"samples\": [\n \"/content/drive/MyDrive/topics/transmission_toyota_camry_2007\",\n \"/content/drive/MyDrive/topics/parking_bestwestern_hotel_sfo\",\n \"/content/drive/MyDrive/topics/seats_honda_accord_2008\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 51,\n \"samples\": [\n \" After slowing down, transmission has to be kicked to speed up .\\n0 I wonder if the people who have problems with rattles and transmission were built in the US .\\n1 The transmission, I don't know what to tell you, but good luck if you don't learn from my mistake .\\n2 I did not notice any hesitation with the transmission until after I read about it last summer, and now I sense a slight bit occasionally .\\n3 I've had the same transmission problems hesitation issues as everyone else .\\n4 I immediately starting noticing transmission surge during 2nd and 3rd gear during first few minutes of driving .\\n5 The transmission is horrible, it shifts revs horribly at the wrong times, it putters when it hits 1 1 2 rpms while coasting unless you rev it or hit the breaks, if you try to start the car in really cold weather it makes a horrible grinding noise, the dash rattles ALL the time, when I try to accelerate getting on the freeway it doesnt move & scares me and when it does move it revs even after take your foot from the gas .\\n6 The transmission doesn't shift correctly, and it has almost caused me to get into an accident twice .\\n7 I'm pretty content with pretty much everything the car offers except the common issue of the transmission that doesn't want to seem to work when you need it .\\n8 Unlike the common concerns with the transmission, all of my concerns problems are with everything other than the drivetrain .\\n9 decent power for a 4 cylinder, but a dangerous hesitating transmission that toyota does not seem to want acknowledge or fix .\\n10 My Camry has been in the shop four times for the transmission problem and still has not been fixed .\\n11 First thing that come to me off the top of my head is the transmission .\\n12 The transmission is the worst ever for camry .\\n13 However, there are too many problems with the transmission .\\n14 I have the 4 cylinder with manual transmission .\\n15 I've had no significant transmission problems .\\n16 Transmission is terrible , , acceleration lag is a safety issue .\\n17 Transmission also can't decide what gear it wants to be in .\\n18 Transmission was replaced by Toyota in the first year .\\n19 The transmission feels terrible when it shifts .\\n20 The transmission is crap, and erratically shifts despite modest acceleration and conservative driving habits .\\n21 The transmission shifts smooth at all speeds .\\n22 No sign of the transmission problem people have complained about, but I'm not expecting a Porsche .\\n23 No rattles or transmission problems .\\n24 After driving my car almost 20,000 miles I have grown disappointed with the transmission hesitation problem as it did not show during the test drive .\\n25 Had 2 TSBs done to recalibrate engine, transmission .\\n26 The engine and transmission works flawlessly when a particular brand of fuel is used and I am absolutely sure I am correct .\\n27 I have the transmission problem .\\n28 No transmission problems as reported by so many others .\\n29 The engine transmission was a Jekyll Hyde affair .\\n30 Here are the transmission problems I've experienced :\\n31 Transmission is confused and CONTINUALLY shifts at speeds of 28 to 35, 38 to 42, and 45 to 51 MPH .\\n32 At this rate, the Transmission will go out @ 37,000 miles right after my Warranty expires !\\n33 Obviously they moved the costs around to provide for the new higher power V6 and the 6 speed transmission, which are so far the car's only redeeming features !\\n34 Toyota now has a fix for the accelerator hesitation and transmission problem !\\n35 EG7031 recalibrate ECM engine and transmission 9159 Bulletin #EG036, 07 .\\n36 I'm not sure what everyone talks about with hesitation transmission not enough power ?\\n37 The transmission cant make up its mind it hesitates to shift .\\n38 Transmission sticks in fourth gear and rpm surge while using the cruise control .\\n39 I am not having all the other issues everyone else is, not sure if its because mine is a manual transmission but I can't say how much I love it .\\n40 Toyota may have computerized the engine and transmission to get better gas mileage but the very best I can get is 25 mpg on the highway .\\n41 While in cruise control and going up a slight incline the transmission is constantly shifting and the rpm goes up and down by as much as 1500 rpm .\\n42 While driving on a straight and level road at about 40 mph the transmission is changing gears .\\n43 Loved the car but two transmissions failed within 19000 miles before I got rid of the car .\\n44 The transmission design has major problems and so did the replacement .\\n45 My dealer told me the new transmissions were on back order and couldn't even give me an ETA .\\n46 The side front windows limit visibility, the transmission hesitates when shifting, the back seat passenger room is spacious, the stereo system has a great bass and the versatility of CD changer, satellite, iPod, etc .\\n47 My transmission works perfectly fine, is fun to shift but does better on its own .\\n48 below the advertised numbers, and a jerky, balky, surging transmission that is difficult to use .\\n49 Terrible transmission that doesn't shift right .\\n50 the significant transmission hesitations are unacceptable and possibly unsafe, and the 4 cyl engine provides inadequate power when challenged .\\n51 I feel the plusses outweigh the negatives, but any prospective buyer should take a serious test drive under varying conditions and actually experience transmission hesitations and the mediocre acceleration performance .\\n52 After one week, I found a rusted conjunction block, which mounts the transmission .\\n53 BTW, this is an auto transmission .\\n54 I hate the transmission as it always hesitates to downshift when the power and speed is needed .\\n55 No problems with the transmission at all .\\n56 I have had no transmission issues or rattling, the comfort and ride of this vehicle felt to me much more high end then what I had paid .\\n57 There have also been a few isolated incidences where I have noticed a delayed surge in the transmission, which once put me in a potentially dangerous situation .\\n58 No transmission flares, hesitations, rattles or any other problems .\\n59 I had one for a year, Toyota was good to replace the two transmissions that failed, I was on my 3rd tranny, when my engine light came on due to a sensor in the tranny .\\n60 The gas pedal & transmission are out of sync .\\n61 At lower speeds when you try to give it gas an intermittent delay occurs between the gas pedal & transmission .\\n62 Acceleration or transmission shifting :\\n63 Quiet and refined ride, 4 cyl has sufficient power for everyday driving, and a smooth transmission that shifts well .\\n64 Transmission not nearly as smooth as previous 4 speed .\\n65 The transmission does occasionally get confused and takes a while to select the right ratio, but this does not occur frequently .\\n66 The transmission is weak, you need to think twice before jumping into traffic .\\n67 Obviously since I got the manual transmission I haven't had any problems with acceleration or anything like that .\\n68 Transmission has a very strange hesitation when shifting .\\n69 Performance stinks due to transmission, always looking for another gear, constantly jerking, dash lights always dimming, lower grill always slipping out .\\n70 When we returned home, I took the car to a transmission specialist and found out that the transmission is slipping .\\n71 Rattles, squeaking, and transmission troubles started shortly after .\\n72 It's VERY bothersome when the transmission down shifts the second one brakes when going down a mountain .\\n73 The speed control as well is balky in that the slightest uphill grade causes the transmission to down shift .\\n74 The accelerating is great, the transmission is smooth, it handles well and breaking is excellent .\\n75 I loved my '05 Camry 4 cyl automatic transmission LE, but I hate my '07 Camry 4 cyl automatic transmission LE .\\n76 Many people have mentioned a hesitation in the transmission I haven't seen it .\\n77 No transmission problems, reacts instantaneously .\\n78 However, the transmission is a little confused at times during downshifting .\\n79 I have had issues with the new 6 speed transmission, there is a shift flare between 3rd and 4th gear with my car .\\n80 Toyota is aware of the problem and they are actually replacing my transmission since they cannot figure out what the cause is .\\n81 Hopefully once I get a new transmission, it will be OK .\\n82 The combination of the weak engine at low engine speeds and the transmission hesitation is so bad that the car is, in my opinion, a safety hazard .\\n83 Dealer recalibrated ECU, engine and transmission .\\n84 Test drove identical camry at a different dealer transmission reacts same way .\\n85 Transmission slips, especially when the car is cold .\\n86 Transmission replacement did not resolve the problem .\\n87 Transmission is exceptionally smooth other than the first few shifts on a cold winter morning .\\n88 Cruise control gains, RPMs accelerate up hill causing engine to make loud noise while using cruise control, higher in back making it harder to judge while backing up and transmission not completely smooth in take offs .\\n89 The six speed auto transmission is very smooth .\\n90 After driving this car for a month it is very obvious to me that there is a design flaw in the transmission .\\n91 The transmission constantly shifts back and forth between gears .\\n92 The transmission is just terrible .\\n93 Transmission is a little different than previous Camrys but MPG and better accel .\\n94 It has plenty of power for my needs and I have noticed no transmission problems at all .\\n95 Like everyone else, I have the problem with the transmission .\\n96 I have had non, stop transmission problems, terrible sunroof noises, very uncharacteristic squeaks and rattles from everywhere in the dash, and unacceptable paint issues .\\n97 It has been in for a rattling sunroof pan within 1 month of purchase 3 trips for a transmission issue the radio quit working this summer and needed replaced and now the oil line for the VVTi has ruptured .\\n98 The transmission leaves a lot to be desired .\\n99 Some have found the transmission shifts too much, but it's only trying to keep the engine in the 2000, 2500 rpm range around town where there's some torque available .\\n100 Toyota made a real goof on the engine and transmission !\\n101 Transmission shifts up and down at highway speeds, which is annoying .\\n102 However, the transmission is sloppy .\\n103 It's automatic transmission is jerky and sometimes hesitant about changing gears .\\n104 MPG is not better than 24mpg w the 4CYL, the transmission slips, the throttle by wire has been non, responsive on several occasions, the ergonomics are off , and the dealership is very proud of their product, too proud .\\n105 Also, the shifting in the transmission is herky jerky .\\n106 the auto transmission is very poorly designed and Toyota hasn't decided what to do .\\n107 When approaching a stop with little or no gas pedal pressure, the transmission downshifts normally until the car shifts gears and suddenly lurches ahead at a higher speed .\\n108 After purchasing my 2007 Camry, which was a hassle because the salesman was pushy, I started having trouble with the transmission slipping !\\n109 The transmission hesitates, also downshifts, hunting between gears, then lurches .\\n110 The engine has a horribly long hesitation when trying to accelerate and the transmission downshifts with the slightest throttle pressure and on the most minor upgrades .\\n111 The only negative is the shifting of the transmission from 40\\n112 The transmission is the nightmare many have already talked about .\\n113 Perhaps the most annoying thing to me, the transmission kicks up and down on shallow declines , never had this in any automatic before .\\n114 If you care about a smooth transmission run don't walk away from the 4cyl automatic 2007 camry .\\n115 LE 2007, 4cy, minor transmission hesitations as I see many other are experencing .\\n116 Transmission does not know sometimes what it is doing when it ?\\n117 Surprisingly agile for a 4 cyl, auto transmission requires manual downshift for quick instant power .\\n118 The transmission is flawed, it takes a few seconds for it to speed up, but once it goes it goes fast, I love the shift gate, great for easy passing !\\n119 Due to lack, of, power or transmission problem, car down, shifts revs to 3000\\n120 Transmission is smooth and the 2 .\\n121 I did have a problem with the transmission but took it in and they reprogrammed the 2 computer chips in there and WOW what a difference that made .\\n122 Power is great, transmission shifts are smooth and accurate .\\n123 Instead of giving me a new car they finally admitted the problems with transmission and replaced it with a new one, free of cost to me cost to them .\\n124 The transmission and cruise control is a joke .\\n125 The transmission hesitates and stumbles .\\n126 After about 3000 miles on my 2007 Camry XLE V6 6sp Auto, it's been in the shop 4 times already and the last call from the dealer was to replace the transmission .\\n127 transmission hunts for gears, ride quality much worse than even a mediocre car, Auto sound level doesn't work, accessory outlets do not work unless car is running or acc is on , radio shuts off when engine is shut off .\\n128 The transmission is not the smoothest .\\n129 268 HP V6 with 6 speed auto transmission is very responsive and smooth .\\n130 The transmission is seamless and, with six forward gears, the engine is virtually never strained in ordinary driving .\\n131 8 Transmission hunts for gears 9Driver side head liner molding buzzes .\\n132 11Transmission unexpectly deaccelates during a slow down .\\n133 However I have noticed, like others, that the new transmission is not that smooth, especially when accelerating from a stop .\\n134 It can occasionally accelerate quickly and jerk you ahead, or hesitate, and sometimes I've noticed the car slow down unnaturally via the transmission .\\n135 The 5 speed transmission shifts like one would with a manual .\\n136 The transmission, or more specifically, the power transfer is scary .\\n137 The reprogramming of the transmission shifting seemed to help for awhile, but it's reverted back .\\n138 I'll probably sell it to avoid an expensive transmission repair after the extended warranty expires .\\n139 The transmission computer is a major issue .\\n140 Dealers do not handle the transmission matters well as I've had no luck in clearing up the inadequacies .\\n141 After researching on the internet I found that the computer for the transmission needed reprogrammed .\\n142 The transmission is jerky and the gas mileage is terrible .\\n143 It has major transmission issues, which I have had fixed twice .\\n144 My transmission works seamlessly and there are no quality issues whatsoever .\\n145 The transmission is driving me crazy .\\n146 While the transmission is downshifting you can feel it thumping through the gears and an audible banging sound can be heard coming from the trans .\\n147 Transmission was very rough, dealership re, programmed, it's ok now .\\n148 The new transmission shifts too frequently to truly optimize gas consumption .\\n149 The transmission is the absolute WORST, it is very dangerous and can cause an accident .\\n150 They have finally fixed my transmission .\\n151 Only problem has been the proprietary transmission glitch everyone talks about .\\n152 I have 4 cyl with manual transmission , lack of power but great fuel economy .\\n153 Transmission big issue and also rattles more than the 2001 Avalon that had 175K miles\",\n \" Parking was expensive but I think this is common for San Fran .\\n0 there is a fee for parking but well worth it seeing no where to park if you do have a car .\\n1 The parking was free, which was great, and the hotel was conveniently located for public transport, and local attractions .\\n2 As for in, and, out parking, I have seen a lot of San Francisco with no car at all .\\n3 They have a parking garage, but they make you leave your vehicle for them to park and then if you want to take a drive later, you have to wait for the staff to get it .\\n4 There is no real parking space, so I had to pull up in front of the hotel in a small space .\\n5 There was valet parking at a cost of $42 .\\n6 Rooms are very comfortable and we were charged $15 for parking our motorcycle in the garage .\\n7 Our ONLY complaint was one doorman valet wasn't thrilled about us parking the car at the front \\n8 Parking is easier then you might realize .\\n9 There is a parking ramp across the street that is MUCH cheaper then hotel parking .\\n10 Our room rate was all in order \\u0096 we\\u0092d booked a TravelZoo special, and the front desk had the right rate, and the right parking discount .\\n11 Of course you have the added thrill of paying over $40 a night for parking and whatever your chiropractor bill is when you are done with the beds .\\n12 I found a great mid week deal that included a discount on parking .\\n13 On the other hand, the valet parking attendant bell people were very friendly .\\n14 Parking is expensive, Rooms are on the small side .\\n15 However, parking is $30 night and valet only, which becomes a pain .\\n16 Only other downer was $38 per night for valet parking .\\n17 room was quiet, clean with good beds but very very smallnot a cheap hotelvalit parking was to much expencive but oke its the location\\n18 Parking is crazy expensive, we drove up from LA so we had a car , but otherwise, you really don't need it .\\n19 Parking is expensive and everything is very much within walking distance .\\n20 Valet parking is, in my view, unreasonably high at $38 per night, but again we knew this before we arrived so can't really complain .\\n21 As most hotels in the city, parking is expensive so unless you really need a vehicle it\\u0092s cheaper to just buy a MUNI Passport during your stay .\\n22 The hotel does have parking, but it is expensive and hard to get around the city while driving .\\n23 The parking was steep , so if I had to do it again I would have parked 1 2 block north for about half of that .\\n24 Parking at $45 a night was outrageous, but probably worth it to keep your car safe .\\n25 We did not have a car, hotel parking is expensive .\\n26 The valet parking was very convenient and seemed secure as it is attached to the hotel .\\n27 A lot of hotel parking garages lots are not on the same premises as the hotel in the area .\\n28 First, the biggest " gotcha" is the mandatory valet parking .\\n29 Not trying to bad mouth the Tuscan, it is a nice place to stay, and if you're not put off by the valet parking, you shouldn't be too disappointed .\\n30 Valet parking for $40 per night seems a bit steep,but at least the service was efficient and quick .\\n31 The prize for vallet parking is steep but I think you can expect that anywhere you go in San Francisco .\\n32 Valet parking was $45 per night with tax, but that includes in and out privileges and my car was there whenever I needed it .\\n33 Watch out for steep parking rates of about $45 per night .\\n34 This total includes the taxes and tips for mandatory valet parking .\\n35 Aside from the parking rate, you won't be disappointed .\\n36 The other thing that I found disappointing was I can't remember the exact details but something like the charge they quote for parking was even more than that because there was some sort of a tax .\\n37 Onsite parking is available .\\n38 I called before we ever arrived to inquire about it and was told that parking was no problem at all .\\n39 I guess calling to inquire about parking while giving them our name and reservation dates didn't warrant the clerk to inform us that we should make a reservation for our car also .\\n40 Valet parking is provided at $36 day which was, I thought, excessive .\\n41 Walgreens has same souvenirs the airport shops do for 1 2 $Do not rent a car, waste of time, money, no parking !\\n42 The valet parking was overpriced, the service was terrible, and the coffe was cold .\\n43 At the hotel, it is valet only parking .\\n44 Check for Internet deals and don't pay for their parking .\\n45 I do think that if you are staying at a hotel you should not have to pay for parking .\\n46 The hotel, located a few blocks from Fisherman's Wharf as well as Ghiardelli Square, has a nice Italian theme that carries into the lobby as well as the uniforms for the parking valets .\\n47 Speaking of parking, you're going to have to pay and it's going to have to be valet service, as there are no free self park lots that are part of the hotel .\\n48 Not only is it pricey at $36 day, but having nothing but valet parking means you have no access to your car unless you have one of the valets fetch it from the lot for you .\\n49 Although our room was indeed non, smoking and we had a king size bed we ended up on the 3rd floor and our room, facing Mason Street, overlooked a concrete multi, story parking lot although if you stood at the window you could see the Coit Tower which was a nicer view !\\n50 Several have mentioned the charge for parking .\\n51 It really does save if you can get a deal with free parking, but the fee is not out of line .\\n52 Valet parking was $36 a day, but we're not complaining because other SF wharf hotels have charged us a similar fee even without the valet service .\\n53 Another irritant was the crazy parking fees for the hotel .\\n54 They do a good job and are a heck of a lot cheaper than a cab and you won\\u0092t have to mess with the parking fees .\\n55 When I got a GREAT deal $99 INCLUDING parking !\\n56 The great thing for us was the free parking .\\n57 Normally parking is $36 a night so getting that thrown in was a fantastic steal .\\n58 We stayed at the BW Tuscan Inn only because they were offering a great winter deal , $99 for a room with king, size bed and free parking .\\n59 Overall, we would recommend this place to friends, especially if they are able to get a good discount and free parking .\\n60 Nice rooms, a bit on the smaller side, but parking right at the hotel .\\n61 staff were helpful although the valet parking and the laundry costs were extremely expensive .\\n62 They allowed this, so we only had to pay the regular parking fee of the hotel .\\n63 Way too much money to pay for parking, but that is the way it is in San Francisco .\\n64 You don't need a car because parking is a nightmare .\\n65 all these hotels charge parking fees .\\n66 Parking at the hotel is expensive at $32 plus tax per night but the up side is that you have in out privilages .\\n67 Parking in the city is a royal pain !\\n68 Although the parking charge is steep, it seems to be the market price in San Francisco, or as the locals like to call it :\\n69 I notice on other reviews the high cost of parking which we didn't have to consider as we were advised you do not need a car to get around SF, and this is quite true .\\n70 All in all, the location was perfect , a short walk to the cable cars or bus lines, a Safeway grocery and Walgreens drugs is across the street in a parking garage, type mall, and there are small places to eat breakfast nearby plus an IHOP a few blocks over .\\n71 Parking at the hotel was a hefty $32 per day with unlimited in and out privileges .\\n72 Parking is an issue in SF so either pay the $30 .\\n73 In addition, the valet parking is apparently handled by an outside contractor, and turned out to be considerably more expensive than we had been told , $35 day , which seemed very high .\\n74 Because of the exhorbitant $29 valet parking fee, we only rented a car for Sonoma and Napa for one day .\\n75 You'll be having fun while some other poor sod is looking for a parking space that isn't there .\\n76 30 am, we discovered that the parking garage next door would not be open until 7 , 7 :\\n77 I thought the $29 per day parking was ridiculous, but I hear that's the standard in SF .\\n78 Upon arriving, there was a very long and confusing to do with the valet parking , we hadn't gotten our luggage out of th car and the valet wanted the keys .\\n79 There was a fee of $29 per day for the parking .\\n80 Valet parking attendant was no better .\\n81 paid $161 plus tax along with a $20 parking fee .\\n82 As far as parking is concerned, we were shell, shocked at what most of the hotels charge for parking\\u0097up to $40 night .\\n83 The Tuscan is $29 night, but if you search for a package rate on their web site, you may get parking included in your room rate .\\n84 And, conveniently, there is a Safeway and a drug store hidden in the parking garage across the street .\\n85 We didnt have or need a car so we didnt have to deal with parking a car I believe it is $30 a day, , par for the city .\\n86 It is located 2 blocks from the wharf which was outstanding considering parking is hard to come by .\\n87 Note to those with a car, overnight valet parking is $26 but right next door the car park is $15 and it takes about 30 seconds to get from your car back to the hotel , why pay $26 ?\\n88 Parking was $26 day , free valet with on and off priv .\\n89 Make sure you realize that you pay for parking .\\n90 00 for valet parking, but that was okay .\\n91 I was aupset, since my $89 night room had gone to $138 night between the parking and the pet charge .\\n92 We didn't pull our car out of the parking garage the whole time we were there .\\n93 Parking is not cheap, check before you go .\\n94 Parking was only $10 with AAA rate .\\n95 Hotel parking is now $23 a night .\",\n \" Front seats are very uncomfortable .\\n0 No memory seats, no trip computer, can only display outside temp with trip odometer .\\n1 needs power seats on the passenger side .\\n2 I haven't had any back pain from the seats, maybe these people exceed the seat weight limit ?\\n3 There is a great deal of road noise in the cabin and the seats are very low quality .\\n4 Power seats are not fully adjustable .\\n5 Front seats are too narrow and not deep enough .\\n6 The seats are extremely uncomfortable .\\n7 I previously owned a 98 Avalon, and found the seats more comfortable than the Honda .\\n8 The seats in the Honda are more firm .\\n9 I'm very sad , I loved my daughter's Civic and the dealer service is fantastic, but even good service can't help the uncomfortable seats .\\n10 It cost me thousands of dollars to get rid of it, but the seats gave me and my wife back pain after 20 minutes of driving !\\n11 Although it is fun to drive and quality seems ok, the leather seats are very uncomfortable, especially on a long drive .\\n12 The seats are decent, the interior design is excellent IMO as well as the exterior design, and thus far it has been extremely reliable .\\n13 In fact, I love the car just wish Honda wouldn't have made such horrible seats .\\n14 Body wasn't used to seats like if you bought a new mattress .\\n15 The interior quality is OK, my 1999 Accord EX had a better comfort level on the seats .\\n16 I just purchased an Accord Sedan with leather seats .\\n17 Only needs to add drivers seat memory, 2, tone perforated leather, xenons, rear seat interior illumination mounted under front seats, and better tilt .\\n18 I can also fit three car seats in the back which was the reason I was able to go back the the Honda family .\\n19 The seats are very comfortable & supportive .\\n20 I test drove an EX, L and felt the seats were too firm plus, the EX, L seemed too slow .\\n21 This Accord has more road noise than I like and the seats tend to be hard, unlike my other Accords .\\n22 Engine performance lacks punch after 60, head rest are poor design, lacks driver seat memory rear seat a c, radio system is marginal compared to Bose, Seats are hard and small for a large person .\\n23 The seats are comfortable, and there is ample leg room in the front and rear .\\n24 Most uncomfortable seats in any vehicle I have ever owned .\\n25 Only 2 things could make it better memory seats and a smoother shifting transmission .\\n26 Seats are firm but not uncomfortable , very BMW like .\\n27 Advise anyone considering the L to drive one for awhile if you can , some cannot stand the seats .\\n28 The seat cover was coming out in between the seats .\\n29 The only for sure complaint I have is the seats seems to hurt my back after I drove for a period of time, this may be because I am use to my silverado truck with leather bucket seats .\\n30 DON'T rely on your test drive, the seats are Very uncomfortable and when the engine goes into the econo mode the vehicle shifts rocks violently forward and when leaving the econo mode it shifts rocks forward once again which means that the vehicle is CONTINUOUSLY SHAKING AND ROCKING .\\n31 Seats are very comfortable and ride is very smooth !\\n32 It's a black beauty with comfy leather seats .\\n33 The front seats are extremely uncomfortable after anything more than 15 minutes of driving due to what I see as a design flaw, the seat curvature is too great, and even with the lumbar support all the way retracted, it still feels like there is some type of bar sticking out in the wrong part of my back .\\n34 However, long, distance comfort is poor due to hard, narrow and deeply, bucketed seats combined with a very taut suspension which transmits even minor road imperfections through the whole vehicle .\\n35 At first the seats seemed stiffer than I'd like, but after making a 2 1 2 hour trip, It felt very comfortable once I got the seat and lumbar adjusted to my liking .\\n36 Great leg room in the back and the seats a very supportive .\\n37 Door closure is solid, leather seats are very comfortable .\\n38 Ride is very good, but seats are just a little firm .\\n39 Seats are not very comfortable and not happy with the heated seats .\\n40 The seats are very comfortable and I love the cloth .\\n41 Seats are little on the hard side .\\n42 The black leather seats feel a bit hot on the back in the warm weather but otherwise no complaints about the interior .\\n43 Steering nice and tight, seats a little stiff but comfortable .\\n44 We wanted three things, heated seats and mirrors and an easy to get out of back seat for some aging friends .\\n45 Ride is superior, comfortable seats, radio excellent .\\n46 5 Seats= Like sitting on a church pew .\\n47 Leather seats are the only thing of good quality .\\n48 Problems with steering wheel, windows & seals, seats .\\n49 Smooth responsive acceleration,top of the line high quality supple comfy leather seats .\\n50 Also, amazing leg space in front AND back seats , the Accord could almost be considered a full size sedan .\\n51 5L V6 scoots sporty handling and acceleration good sporty leather seats highway gas mileage appearance package worth having no dealer service yet Negatives :\\n52 First off the new body style is very appealing and the new seats are more forgiving for larger men .\\n53 The heated seats for me and my passenger are a plus for the cold weather .\\n54 hard seats, hard ride, more road noise than expected, disappointing gas mileage .\\n55 The seats are supportive and the materials are great .\\n56 You get a V, 6, heated leather seats, XM, 18 rims .\\n57 Cloth front seats big & comfortable .\\n58 Seats are stiff but once adjusted seem to become more comfortable .\\n59 The seats are very firm, but getting used to this .\\n60 The seats in my 2008 which is just like a 2009 are considerably less than I'm used to from Honda .\\n61 The only hiccup I can report is that I think that the seats in our 2008 Odyssey are a bit more comfortable .\\n62 Don't get me wrong, the Accord is a comfortable car, I am just a big guy and the seats just feel like they could use a little more of something .\\n63 I have two herniated disks and the seats of the Honda have alleviated the pain in my legs and back when I drive .\\n64 Additionally, the standard seats are not my favorite .\\n65 Although it's a lower trim level, it has high quality interior trim very comfortable seats and and very smooth, quiet ride .\\n66 Decent accel, huge back seat for my kids baby seats large friends .\\n67 we don't need moonroof, heated seats side mirrors we live in S .\\n68 With the leather seats, comfort is close to EX, L's at a best buy price .\\n69 Seats are a bit too firm for me .\\n70 Leather seats are very comfortable .\\n71 The inside and outside pads should ALWAYS wear evenly Always had stiff ride and seats .\\n72 I have a bad lower back, and the lumbar support on the seats is a life saver !\\n73 Front seats much more comfortable .\\n74 The satellite radio cuts out constantly, the heated seats are barely warm, the sound system is pathetic and the brakes wore out around 15,000 miles google it .\\n75 We are both tall, 5'11'' and 6'2 and have no problems with the seats .\\n76 After driving it for a few months I found the seats are tough on the lower back on long runs and it need a few more inches to go back .\\n77 Seats are too firm and leather is quite hard in character and feel .\\n78 I was slightly concerned about all the reviews with the seats being uncomfortable .\\n79 I love the seats, they are supportive .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 6 + } + ], + "source": [ + "import pandas as pd\n", + "import glob, os\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "pd.set_option('display.max_colwidth', 700)\n", + "\n", + "path = \"/content/drive/MyDrive/topics\"\n", + "\n", + "all_files = glob.glob(os.path.join(path, \"*.data\"))\n", + "filename_list = []\n", + "opinion_text = []\n", + "\n", + "\n", + "for file_ in all_files:\n", + " df = pd.read_table(file_,index_col=None, header=0,encoding='latin1')\n", + "\n", + "\n", + " filename_ = file_.split('\\\\')[-1]\n", + " filename = filename_.split('.')[0]\n", + "\n", + " filename_list.append(filename)\n", + " opinion_text.append(df.to_string())\n", + "\n", + "document_df = pd.DataFrame({'filename':filename_list, 'opinion_text':opinion_text})\n", + "document_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "f5c4ff91-83ae-4707-aab1-76e7e4c3260c", + "metadata": { + "id": "f5c4ff91-83ae-4707-aab1-76e7e4c3260c" + }, + "outputs": [], + "source": [ + "from nltk.stem import WordNetLemmatizer\n", + "import nltk\n", + "import string\n", + "\n", + "remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)\n", + "lemmar = WordNetLemmatizer()\n", + "\n", + "def LemTokens(tokens):\n", + " return [lemmar.lemmatize(token) for token in tokens]\n", + "\n", + "def LemNormalize(text):\n", + " return LemTokens(nltk.word_tokenize(text.lower().translate(remove_punct_dict)))" + ] + }, + { + "cell_type": "code", + "source": [ + "import nltk\n", + "nltk.download('punkt_tab')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GaB6WlluWpI1", + "outputId": "73d7be6a-222a-489e-8fb5-5a01235731aa" + }, + "id": "GaB6WlluWpI1", + "execution_count": 8, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "[nltk_data] Downloading package punkt_tab to /root/nltk_data...\n", + "[nltk_data] Unzipping tokenizers/punkt_tab.zip.\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "True" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import nltk\n", + "nltk.data.path.insert(0, '/root/nltk_data')\n", + "\n", + "nltk.download('punkt', download_dir='/root/nltk_data')\n", + "\n", + "from nltk.tokenize import word_tokenize\n", + "\n", + "print(word_tokenize(\"This is a test.\")) # ['This', 'is', 'a', 'test', '.']" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "IY4fMbvxV6ey", + "outputId": "60b08141-0f55-4120-acf0-8d9db787a26b" + }, + "id": "IY4fMbvxV6ey", + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "[nltk_data] Downloading package punkt to /root/nltk_data...\n", + "[nltk_data] Unzipping tokenizers/punkt.zip.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "['This', 'is', 'a', 'test', '.']\n" + ] + } + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "ab83ed7f-6e0d-4f66-9ddc-4f746ac77d44", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ab83ed7f-6e0d-4f66-9ddc-4f746ac77d44", + "outputId": "73c1afc6-d7e6-4ed6-d4d4-207da9c9e8cb" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "[nltk_data] Downloading package wordnet to /root/nltk_data...\n" + ] + } + ], + "source": [ + "import nltk\n", + "nltk.download('wordnet')\n", + "\n", + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "\n", + "tfidf_vect = TfidfVectorizer(tokenizer=LemNormalize, stop_words='english' , \\\n", + " ngram_range=(1,2), min_df=0.05, max_df=0.85 )\n", + "\n", + "feature_vect = tfidf_vect.fit_transform(document_df['opinion_text'])" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "5ef2e7f0-fa24-4b9e-a112-e563a04264af", + "metadata": { + "id": "5ef2e7f0-fa24-4b9e-a112-e563a04264af" + }, + "outputs": [], + "source": [ + "# 전처리 함수, vectorizer, 데이터프레임 등 정의\n", + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "\n", + "tfidf_vect = TfidfVectorizer(tokenizer=LemNormalize, stop_words='english',\n", + " ngram_range=(1,2), min_df=0.05, max_df=0.85)\n", + "feature_vect = tfidf_vect.fit_transform(document_df['opinion_text'])\n", + "\n", + "\n", + "from sklearn.cluster import KMeans\n", + "\n", + "km_cluster = KMeans(n_clusters=5, max_iter=10000, random_state=0)\n", + "km_cluster.fit(feature_vect)\n", + "cluster_label = km_cluster.labels_\n", + "cluster_centers = km_cluster.cluster_centers_" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "c9a47014-9dd1-4b65-a25e-ec8346e7e351", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 848 + }, + "id": "c9a47014-9dd1-4b65-a25e-ec8346e7e351", + "outputId": "527969d3-6ebe-4ee3-f6a7-0e6d561f2254" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "0 /content/drive/MyDrive/topics/battery-life_ipod_nano_8gb \n", + "1 /content/drive/MyDrive/topics/display_garmin_nuvi_255W_gps \n", + "2 /content/drive/MyDrive/topics/speed_garmin_nuvi_255W_gps \n", + "3 /content/drive/MyDrive/topics/speed_windows7 \n", + "4 /content/drive/MyDrive/topics/sound_ipod_nano_8gb \n", + "\n", + " opinion_text \\\n", + "0 short battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ... \n", + "1 3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ... \n", + "2 Another feature on the 255w is a display of the posted speed limit on the road which you are currently on right above your current displayed speed .\\n0 I found myself not even looking at my car speedometer as I could easily see my current speed and the speed limit of my route at a glance .\\n1 ... \n", + "3 Windows 7 is quite simply faster, more stable, boots faster, goes to sleep faster, comes back from sleep faster, manages your files better and on top of that it's beautiful to look at and easy to use .\\n0 , faster about 20% to 30% faster at running applications than my Vista , seriously\\n1 ... \n", + "4 headphone jack i got a clear case for it and it i got a clear case for it and it like prvents me from being able to put the jack all the way in so the sound can b messsed up or i can get it in there and its playing well them go to move or something and it slides out .\\n0 Picture and sound quality are excellent for this typ of devic .\\n1 ... \n", + "\n", + " cluster_label \n", + "0 4 \n", + "1 3 \n", + "2 3 \n", + "3 4 \n", + "4 4 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
filenameopinion_textcluster_label
0/content/drive/MyDrive/topics/battery-life_ipod_nano_8gbshort battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ...4
1/content/drive/MyDrive/topics/display_garmin_nuvi_255W_gps3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ...3
2/content/drive/MyDrive/topics/speed_garmin_nuvi_255W_gpsAnother feature on the 255w is a display of the posted speed limit on the road which you are currently on right above your current displayed speed .\\n0 I found myself not even looking at my car speedometer as I could easily see my current speed and the speed limit of my route at a glance .\\n1 ...3
3/content/drive/MyDrive/topics/speed_windows7Windows 7 is quite simply faster, more stable, boots faster, goes to sleep faster, comes back from sleep faster, manages your files better and on top of that it's beautiful to look at and easy to use .\\n0 , faster about 20% to 30% faster at running applications than my Vista , seriously\\n1 ...4
4/content/drive/MyDrive/topics/sound_ipod_nano_8gbheadphone jack i got a clear case for it and it i got a clear case for it and it like prvents me from being able to put the jack all the way in so the sound can b messsed up or i can get it in there and its playing well them go to move or something and it slides out .\\n0 Picture and sound quality are excellent for this typ of devic .\\n1 ...4
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "document_df", + "summary": "{\n \"name\": \"document_df\",\n \"rows\": 51,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 51,\n \"samples\": [\n \"/content/drive/MyDrive/topics/transmission_toyota_camry_2007\",\n \"/content/drive/MyDrive/topics/parking_bestwestern_hotel_sfo\",\n \"/content/drive/MyDrive/topics/seats_honda_accord_2008\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 51,\n \"samples\": [\n \" After slowing down, transmission has to be kicked to speed up .\\n0 I wonder if the people who have problems with rattles and transmission were built in the US .\\n1 The transmission, I don't know what to tell you, but good luck if you don't learn from my mistake .\\n2 I did not notice any hesitation with the transmission until after I read about it last summer, and now I sense a slight bit occasionally .\\n3 I've had the same transmission problems hesitation issues as everyone else .\\n4 I immediately starting noticing transmission surge during 2nd and 3rd gear during first few minutes of driving .\\n5 The transmission is horrible, it shifts revs horribly at the wrong times, it putters when it hits 1 1 2 rpms while coasting unless you rev it or hit the breaks, if you try to start the car in really cold weather it makes a horrible grinding noise, the dash rattles ALL the time, when I try to accelerate getting on the freeway it doesnt move & scares me and when it does move it revs even after take your foot from the gas .\\n6 The transmission doesn't shift correctly, and it has almost caused me to get into an accident twice .\\n7 I'm pretty content with pretty much everything the car offers except the common issue of the transmission that doesn't want to seem to work when you need it .\\n8 Unlike the common concerns with the transmission, all of my concerns problems are with everything other than the drivetrain .\\n9 decent power for a 4 cylinder, but a dangerous hesitating transmission that toyota does not seem to want acknowledge or fix .\\n10 My Camry has been in the shop four times for the transmission problem and still has not been fixed .\\n11 First thing that come to me off the top of my head is the transmission .\\n12 The transmission is the worst ever for camry .\\n13 However, there are too many problems with the transmission .\\n14 I have the 4 cylinder with manual transmission .\\n15 I've had no significant transmission problems .\\n16 Transmission is terrible , , acceleration lag is a safety issue .\\n17 Transmission also can't decide what gear it wants to be in .\\n18 Transmission was replaced by Toyota in the first year .\\n19 The transmission feels terrible when it shifts .\\n20 The transmission is crap, and erratically shifts despite modest acceleration and conservative driving habits .\\n21 The transmission shifts smooth at all speeds .\\n22 No sign of the transmission problem people have complained about, but I'm not expecting a Porsche .\\n23 No rattles or transmission problems .\\n24 After driving my car almost 20,000 miles I have grown disappointed with the transmission hesitation problem as it did not show during the test drive .\\n25 Had 2 TSBs done to recalibrate engine, transmission .\\n26 The engine and transmission works flawlessly when a particular brand of fuel is used and I am absolutely sure I am correct .\\n27 I have the transmission problem .\\n28 No transmission problems as reported by so many others .\\n29 The engine transmission was a Jekyll Hyde affair .\\n30 Here are the transmission problems I've experienced :\\n31 Transmission is confused and CONTINUALLY shifts at speeds of 28 to 35, 38 to 42, and 45 to 51 MPH .\\n32 At this rate, the Transmission will go out @ 37,000 miles right after my Warranty expires !\\n33 Obviously they moved the costs around to provide for the new higher power V6 and the 6 speed transmission, which are so far the car's only redeeming features !\\n34 Toyota now has a fix for the accelerator hesitation and transmission problem !\\n35 EG7031 recalibrate ECM engine and transmission 9159 Bulletin #EG036, 07 .\\n36 I'm not sure what everyone talks about with hesitation transmission not enough power ?\\n37 The transmission cant make up its mind it hesitates to shift .\\n38 Transmission sticks in fourth gear and rpm surge while using the cruise control .\\n39 I am not having all the other issues everyone else is, not sure if its because mine is a manual transmission but I can't say how much I love it .\\n40 Toyota may have computerized the engine and transmission to get better gas mileage but the very best I can get is 25 mpg on the highway .\\n41 While in cruise control and going up a slight incline the transmission is constantly shifting and the rpm goes up and down by as much as 1500 rpm .\\n42 While driving on a straight and level road at about 40 mph the transmission is changing gears .\\n43 Loved the car but two transmissions failed within 19000 miles before I got rid of the car .\\n44 The transmission design has major problems and so did the replacement .\\n45 My dealer told me the new transmissions were on back order and couldn't even give me an ETA .\\n46 The side front windows limit visibility, the transmission hesitates when shifting, the back seat passenger room is spacious, the stereo system has a great bass and the versatility of CD changer, satellite, iPod, etc .\\n47 My transmission works perfectly fine, is fun to shift but does better on its own .\\n48 below the advertised numbers, and a jerky, balky, surging transmission that is difficult to use .\\n49 Terrible transmission that doesn't shift right .\\n50 the significant transmission hesitations are unacceptable and possibly unsafe, and the 4 cyl engine provides inadequate power when challenged .\\n51 I feel the plusses outweigh the negatives, but any prospective buyer should take a serious test drive under varying conditions and actually experience transmission hesitations and the mediocre acceleration performance .\\n52 After one week, I found a rusted conjunction block, which mounts the transmission .\\n53 BTW, this is an auto transmission .\\n54 I hate the transmission as it always hesitates to downshift when the power and speed is needed .\\n55 No problems with the transmission at all .\\n56 I have had no transmission issues or rattling, the comfort and ride of this vehicle felt to me much more high end then what I had paid .\\n57 There have also been a few isolated incidences where I have noticed a delayed surge in the transmission, which once put me in a potentially dangerous situation .\\n58 No transmission flares, hesitations, rattles or any other problems .\\n59 I had one for a year, Toyota was good to replace the two transmissions that failed, I was on my 3rd tranny, when my engine light came on due to a sensor in the tranny .\\n60 The gas pedal & transmission are out of sync .\\n61 At lower speeds when you try to give it gas an intermittent delay occurs between the gas pedal & transmission .\\n62 Acceleration or transmission shifting :\\n63 Quiet and refined ride, 4 cyl has sufficient power for everyday driving, and a smooth transmission that shifts well .\\n64 Transmission not nearly as smooth as previous 4 speed .\\n65 The transmission does occasionally get confused and takes a while to select the right ratio, but this does not occur frequently .\\n66 The transmission is weak, you need to think twice before jumping into traffic .\\n67 Obviously since I got the manual transmission I haven't had any problems with acceleration or anything like that .\\n68 Transmission has a very strange hesitation when shifting .\\n69 Performance stinks due to transmission, always looking for another gear, constantly jerking, dash lights always dimming, lower grill always slipping out .\\n70 When we returned home, I took the car to a transmission specialist and found out that the transmission is slipping .\\n71 Rattles, squeaking, and transmission troubles started shortly after .\\n72 It's VERY bothersome when the transmission down shifts the second one brakes when going down a mountain .\\n73 The speed control as well is balky in that the slightest uphill grade causes the transmission to down shift .\\n74 The accelerating is great, the transmission is smooth, it handles well and breaking is excellent .\\n75 I loved my '05 Camry 4 cyl automatic transmission LE, but I hate my '07 Camry 4 cyl automatic transmission LE .\\n76 Many people have mentioned a hesitation in the transmission I haven't seen it .\\n77 No transmission problems, reacts instantaneously .\\n78 However, the transmission is a little confused at times during downshifting .\\n79 I have had issues with the new 6 speed transmission, there is a shift flare between 3rd and 4th gear with my car .\\n80 Toyota is aware of the problem and they are actually replacing my transmission since they cannot figure out what the cause is .\\n81 Hopefully once I get a new transmission, it will be OK .\\n82 The combination of the weak engine at low engine speeds and the transmission hesitation is so bad that the car is, in my opinion, a safety hazard .\\n83 Dealer recalibrated ECU, engine and transmission .\\n84 Test drove identical camry at a different dealer transmission reacts same way .\\n85 Transmission slips, especially when the car is cold .\\n86 Transmission replacement did not resolve the problem .\\n87 Transmission is exceptionally smooth other than the first few shifts on a cold winter morning .\\n88 Cruise control gains, RPMs accelerate up hill causing engine to make loud noise while using cruise control, higher in back making it harder to judge while backing up and transmission not completely smooth in take offs .\\n89 The six speed auto transmission is very smooth .\\n90 After driving this car for a month it is very obvious to me that there is a design flaw in the transmission .\\n91 The transmission constantly shifts back and forth between gears .\\n92 The transmission is just terrible .\\n93 Transmission is a little different than previous Camrys but MPG and better accel .\\n94 It has plenty of power for my needs and I have noticed no transmission problems at all .\\n95 Like everyone else, I have the problem with the transmission .\\n96 I have had non, stop transmission problems, terrible sunroof noises, very uncharacteristic squeaks and rattles from everywhere in the dash, and unacceptable paint issues .\\n97 It has been in for a rattling sunroof pan within 1 month of purchase 3 trips for a transmission issue the radio quit working this summer and needed replaced and now the oil line for the VVTi has ruptured .\\n98 The transmission leaves a lot to be desired .\\n99 Some have found the transmission shifts too much, but it's only trying to keep the engine in the 2000, 2500 rpm range around town where there's some torque available .\\n100 Toyota made a real goof on the engine and transmission !\\n101 Transmission shifts up and down at highway speeds, which is annoying .\\n102 However, the transmission is sloppy .\\n103 It's automatic transmission is jerky and sometimes hesitant about changing gears .\\n104 MPG is not better than 24mpg w the 4CYL, the transmission slips, the throttle by wire has been non, responsive on several occasions, the ergonomics are off , and the dealership is very proud of their product, too proud .\\n105 Also, the shifting in the transmission is herky jerky .\\n106 the auto transmission is very poorly designed and Toyota hasn't decided what to do .\\n107 When approaching a stop with little or no gas pedal pressure, the transmission downshifts normally until the car shifts gears and suddenly lurches ahead at a higher speed .\\n108 After purchasing my 2007 Camry, which was a hassle because the salesman was pushy, I started having trouble with the transmission slipping !\\n109 The transmission hesitates, also downshifts, hunting between gears, then lurches .\\n110 The engine has a horribly long hesitation when trying to accelerate and the transmission downshifts with the slightest throttle pressure and on the most minor upgrades .\\n111 The only negative is the shifting of the transmission from 40\\n112 The transmission is the nightmare many have already talked about .\\n113 Perhaps the most annoying thing to me, the transmission kicks up and down on shallow declines , never had this in any automatic before .\\n114 If you care about a smooth transmission run don't walk away from the 4cyl automatic 2007 camry .\\n115 LE 2007, 4cy, minor transmission hesitations as I see many other are experencing .\\n116 Transmission does not know sometimes what it is doing when it ?\\n117 Surprisingly agile for a 4 cyl, auto transmission requires manual downshift for quick instant power .\\n118 The transmission is flawed, it takes a few seconds for it to speed up, but once it goes it goes fast, I love the shift gate, great for easy passing !\\n119 Due to lack, of, power or transmission problem, car down, shifts revs to 3000\\n120 Transmission is smooth and the 2 .\\n121 I did have a problem with the transmission but took it in and they reprogrammed the 2 computer chips in there and WOW what a difference that made .\\n122 Power is great, transmission shifts are smooth and accurate .\\n123 Instead of giving me a new car they finally admitted the problems with transmission and replaced it with a new one, free of cost to me cost to them .\\n124 The transmission and cruise control is a joke .\\n125 The transmission hesitates and stumbles .\\n126 After about 3000 miles on my 2007 Camry XLE V6 6sp Auto, it's been in the shop 4 times already and the last call from the dealer was to replace the transmission .\\n127 transmission hunts for gears, ride quality much worse than even a mediocre car, Auto sound level doesn't work, accessory outlets do not work unless car is running or acc is on , radio shuts off when engine is shut off .\\n128 The transmission is not the smoothest .\\n129 268 HP V6 with 6 speed auto transmission is very responsive and smooth .\\n130 The transmission is seamless and, with six forward gears, the engine is virtually never strained in ordinary driving .\\n131 8 Transmission hunts for gears 9Driver side head liner molding buzzes .\\n132 11Transmission unexpectly deaccelates during a slow down .\\n133 However I have noticed, like others, that the new transmission is not that smooth, especially when accelerating from a stop .\\n134 It can occasionally accelerate quickly and jerk you ahead, or hesitate, and sometimes I've noticed the car slow down unnaturally via the transmission .\\n135 The 5 speed transmission shifts like one would with a manual .\\n136 The transmission, or more specifically, the power transfer is scary .\\n137 The reprogramming of the transmission shifting seemed to help for awhile, but it's reverted back .\\n138 I'll probably sell it to avoid an expensive transmission repair after the extended warranty expires .\\n139 The transmission computer is a major issue .\\n140 Dealers do not handle the transmission matters well as I've had no luck in clearing up the inadequacies .\\n141 After researching on the internet I found that the computer for the transmission needed reprogrammed .\\n142 The transmission is jerky and the gas mileage is terrible .\\n143 It has major transmission issues, which I have had fixed twice .\\n144 My transmission works seamlessly and there are no quality issues whatsoever .\\n145 The transmission is driving me crazy .\\n146 While the transmission is downshifting you can feel it thumping through the gears and an audible banging sound can be heard coming from the trans .\\n147 Transmission was very rough, dealership re, programmed, it's ok now .\\n148 The new transmission shifts too frequently to truly optimize gas consumption .\\n149 The transmission is the absolute WORST, it is very dangerous and can cause an accident .\\n150 They have finally fixed my transmission .\\n151 Only problem has been the proprietary transmission glitch everyone talks about .\\n152 I have 4 cyl with manual transmission , lack of power but great fuel economy .\\n153 Transmission big issue and also rattles more than the 2001 Avalon that had 175K miles\",\n \" Parking was expensive but I think this is common for San Fran .\\n0 there is a fee for parking but well worth it seeing no where to park if you do have a car .\\n1 The parking was free, which was great, and the hotel was conveniently located for public transport, and local attractions .\\n2 As for in, and, out parking, I have seen a lot of San Francisco with no car at all .\\n3 They have a parking garage, but they make you leave your vehicle for them to park and then if you want to take a drive later, you have to wait for the staff to get it .\\n4 There is no real parking space, so I had to pull up in front of the hotel in a small space .\\n5 There was valet parking at a cost of $42 .\\n6 Rooms are very comfortable and we were charged $15 for parking our motorcycle in the garage .\\n7 Our ONLY complaint was one doorman valet wasn't thrilled about us parking the car at the front \\n8 Parking is easier then you might realize .\\n9 There is a parking ramp across the street that is MUCH cheaper then hotel parking .\\n10 Our room rate was all in order \\u0096 we\\u0092d booked a TravelZoo special, and the front desk had the right rate, and the right parking discount .\\n11 Of course you have the added thrill of paying over $40 a night for parking and whatever your chiropractor bill is when you are done with the beds .\\n12 I found a great mid week deal that included a discount on parking .\\n13 On the other hand, the valet parking attendant bell people were very friendly .\\n14 Parking is expensive, Rooms are on the small side .\\n15 However, parking is $30 night and valet only, which becomes a pain .\\n16 Only other downer was $38 per night for valet parking .\\n17 room was quiet, clean with good beds but very very smallnot a cheap hotelvalit parking was to much expencive but oke its the location\\n18 Parking is crazy expensive, we drove up from LA so we had a car , but otherwise, you really don't need it .\\n19 Parking is expensive and everything is very much within walking distance .\\n20 Valet parking is, in my view, unreasonably high at $38 per night, but again we knew this before we arrived so can't really complain .\\n21 As most hotels in the city, parking is expensive so unless you really need a vehicle it\\u0092s cheaper to just buy a MUNI Passport during your stay .\\n22 The hotel does have parking, but it is expensive and hard to get around the city while driving .\\n23 The parking was steep , so if I had to do it again I would have parked 1 2 block north for about half of that .\\n24 Parking at $45 a night was outrageous, but probably worth it to keep your car safe .\\n25 We did not have a car, hotel parking is expensive .\\n26 The valet parking was very convenient and seemed secure as it is attached to the hotel .\\n27 A lot of hotel parking garages lots are not on the same premises as the hotel in the area .\\n28 First, the biggest " gotcha" is the mandatory valet parking .\\n29 Not trying to bad mouth the Tuscan, it is a nice place to stay, and if you're not put off by the valet parking, you shouldn't be too disappointed .\\n30 Valet parking for $40 per night seems a bit steep,but at least the service was efficient and quick .\\n31 The prize for vallet parking is steep but I think you can expect that anywhere you go in San Francisco .\\n32 Valet parking was $45 per night with tax, but that includes in and out privileges and my car was there whenever I needed it .\\n33 Watch out for steep parking rates of about $45 per night .\\n34 This total includes the taxes and tips for mandatory valet parking .\\n35 Aside from the parking rate, you won't be disappointed .\\n36 The other thing that I found disappointing was I can't remember the exact details but something like the charge they quote for parking was even more than that because there was some sort of a tax .\\n37 Onsite parking is available .\\n38 I called before we ever arrived to inquire about it and was told that parking was no problem at all .\\n39 I guess calling to inquire about parking while giving them our name and reservation dates didn't warrant the clerk to inform us that we should make a reservation for our car also .\\n40 Valet parking is provided at $36 day which was, I thought, excessive .\\n41 Walgreens has same souvenirs the airport shops do for 1 2 $Do not rent a car, waste of time, money, no parking !\\n42 The valet parking was overpriced, the service was terrible, and the coffe was cold .\\n43 At the hotel, it is valet only parking .\\n44 Check for Internet deals and don't pay for their parking .\\n45 I do think that if you are staying at a hotel you should not have to pay for parking .\\n46 The hotel, located a few blocks from Fisherman's Wharf as well as Ghiardelli Square, has a nice Italian theme that carries into the lobby as well as the uniforms for the parking valets .\\n47 Speaking of parking, you're going to have to pay and it's going to have to be valet service, as there are no free self park lots that are part of the hotel .\\n48 Not only is it pricey at $36 day, but having nothing but valet parking means you have no access to your car unless you have one of the valets fetch it from the lot for you .\\n49 Although our room was indeed non, smoking and we had a king size bed we ended up on the 3rd floor and our room, facing Mason Street, overlooked a concrete multi, story parking lot although if you stood at the window you could see the Coit Tower which was a nicer view !\\n50 Several have mentioned the charge for parking .\\n51 It really does save if you can get a deal with free parking, but the fee is not out of line .\\n52 Valet parking was $36 a day, but we're not complaining because other SF wharf hotels have charged us a similar fee even without the valet service .\\n53 Another irritant was the crazy parking fees for the hotel .\\n54 They do a good job and are a heck of a lot cheaper than a cab and you won\\u0092t have to mess with the parking fees .\\n55 When I got a GREAT deal $99 INCLUDING parking !\\n56 The great thing for us was the free parking .\\n57 Normally parking is $36 a night so getting that thrown in was a fantastic steal .\\n58 We stayed at the BW Tuscan Inn only because they were offering a great winter deal , $99 for a room with king, size bed and free parking .\\n59 Overall, we would recommend this place to friends, especially if they are able to get a good discount and free parking .\\n60 Nice rooms, a bit on the smaller side, but parking right at the hotel .\\n61 staff were helpful although the valet parking and the laundry costs were extremely expensive .\\n62 They allowed this, so we only had to pay the regular parking fee of the hotel .\\n63 Way too much money to pay for parking, but that is the way it is in San Francisco .\\n64 You don't need a car because parking is a nightmare .\\n65 all these hotels charge parking fees .\\n66 Parking at the hotel is expensive at $32 plus tax per night but the up side is that you have in out privilages .\\n67 Parking in the city is a royal pain !\\n68 Although the parking charge is steep, it seems to be the market price in San Francisco, or as the locals like to call it :\\n69 I notice on other reviews the high cost of parking which we didn't have to consider as we were advised you do not need a car to get around SF, and this is quite true .\\n70 All in all, the location was perfect , a short walk to the cable cars or bus lines, a Safeway grocery and Walgreens drugs is across the street in a parking garage, type mall, and there are small places to eat breakfast nearby plus an IHOP a few blocks over .\\n71 Parking at the hotel was a hefty $32 per day with unlimited in and out privileges .\\n72 Parking is an issue in SF so either pay the $30 .\\n73 In addition, the valet parking is apparently handled by an outside contractor, and turned out to be considerably more expensive than we had been told , $35 day , which seemed very high .\\n74 Because of the exhorbitant $29 valet parking fee, we only rented a car for Sonoma and Napa for one day .\\n75 You'll be having fun while some other poor sod is looking for a parking space that isn't there .\\n76 30 am, we discovered that the parking garage next door would not be open until 7 , 7 :\\n77 I thought the $29 per day parking was ridiculous, but I hear that's the standard in SF .\\n78 Upon arriving, there was a very long and confusing to do with the valet parking , we hadn't gotten our luggage out of th car and the valet wanted the keys .\\n79 There was a fee of $29 per day for the parking .\\n80 Valet parking attendant was no better .\\n81 paid $161 plus tax along with a $20 parking fee .\\n82 As far as parking is concerned, we were shell, shocked at what most of the hotels charge for parking\\u0097up to $40 night .\\n83 The Tuscan is $29 night, but if you search for a package rate on their web site, you may get parking included in your room rate .\\n84 And, conveniently, there is a Safeway and a drug store hidden in the parking garage across the street .\\n85 We didnt have or need a car so we didnt have to deal with parking a car I believe it is $30 a day, , par for the city .\\n86 It is located 2 blocks from the wharf which was outstanding considering parking is hard to come by .\\n87 Note to those with a car, overnight valet parking is $26 but right next door the car park is $15 and it takes about 30 seconds to get from your car back to the hotel , why pay $26 ?\\n88 Parking was $26 day , free valet with on and off priv .\\n89 Make sure you realize that you pay for parking .\\n90 00 for valet parking, but that was okay .\\n91 I was aupset, since my $89 night room had gone to $138 night between the parking and the pet charge .\\n92 We didn't pull our car out of the parking garage the whole time we were there .\\n93 Parking is not cheap, check before you go .\\n94 Parking was only $10 with AAA rate .\\n95 Hotel parking is now $23 a night .\",\n \" Front seats are very uncomfortable .\\n0 No memory seats, no trip computer, can only display outside temp with trip odometer .\\n1 needs power seats on the passenger side .\\n2 I haven't had any back pain from the seats, maybe these people exceed the seat weight limit ?\\n3 There is a great deal of road noise in the cabin and the seats are very low quality .\\n4 Power seats are not fully adjustable .\\n5 Front seats are too narrow and not deep enough .\\n6 The seats are extremely uncomfortable .\\n7 I previously owned a 98 Avalon, and found the seats more comfortable than the Honda .\\n8 The seats in the Honda are more firm .\\n9 I'm very sad , I loved my daughter's Civic and the dealer service is fantastic, but even good service can't help the uncomfortable seats .\\n10 It cost me thousands of dollars to get rid of it, but the seats gave me and my wife back pain after 20 minutes of driving !\\n11 Although it is fun to drive and quality seems ok, the leather seats are very uncomfortable, especially on a long drive .\\n12 The seats are decent, the interior design is excellent IMO as well as the exterior design, and thus far it has been extremely reliable .\\n13 In fact, I love the car just wish Honda wouldn't have made such horrible seats .\\n14 Body wasn't used to seats like if you bought a new mattress .\\n15 The interior quality is OK, my 1999 Accord EX had a better comfort level on the seats .\\n16 I just purchased an Accord Sedan with leather seats .\\n17 Only needs to add drivers seat memory, 2, tone perforated leather, xenons, rear seat interior illumination mounted under front seats, and better tilt .\\n18 I can also fit three car seats in the back which was the reason I was able to go back the the Honda family .\\n19 The seats are very comfortable & supportive .\\n20 I test drove an EX, L and felt the seats were too firm plus, the EX, L seemed too slow .\\n21 This Accord has more road noise than I like and the seats tend to be hard, unlike my other Accords .\\n22 Engine performance lacks punch after 60, head rest are poor design, lacks driver seat memory rear seat a c, radio system is marginal compared to Bose, Seats are hard and small for a large person .\\n23 The seats are comfortable, and there is ample leg room in the front and rear .\\n24 Most uncomfortable seats in any vehicle I have ever owned .\\n25 Only 2 things could make it better memory seats and a smoother shifting transmission .\\n26 Seats are firm but not uncomfortable , very BMW like .\\n27 Advise anyone considering the L to drive one for awhile if you can , some cannot stand the seats .\\n28 The seat cover was coming out in between the seats .\\n29 The only for sure complaint I have is the seats seems to hurt my back after I drove for a period of time, this may be because I am use to my silverado truck with leather bucket seats .\\n30 DON'T rely on your test drive, the seats are Very uncomfortable and when the engine goes into the econo mode the vehicle shifts rocks violently forward and when leaving the econo mode it shifts rocks forward once again which means that the vehicle is CONTINUOUSLY SHAKING AND ROCKING .\\n31 Seats are very comfortable and ride is very smooth !\\n32 It's a black beauty with comfy leather seats .\\n33 The front seats are extremely uncomfortable after anything more than 15 minutes of driving due to what I see as a design flaw, the seat curvature is too great, and even with the lumbar support all the way retracted, it still feels like there is some type of bar sticking out in the wrong part of my back .\\n34 However, long, distance comfort is poor due to hard, narrow and deeply, bucketed seats combined with a very taut suspension which transmits even minor road imperfections through the whole vehicle .\\n35 At first the seats seemed stiffer than I'd like, but after making a 2 1 2 hour trip, It felt very comfortable once I got the seat and lumbar adjusted to my liking .\\n36 Great leg room in the back and the seats a very supportive .\\n37 Door closure is solid, leather seats are very comfortable .\\n38 Ride is very good, but seats are just a little firm .\\n39 Seats are not very comfortable and not happy with the heated seats .\\n40 The seats are very comfortable and I love the cloth .\\n41 Seats are little on the hard side .\\n42 The black leather seats feel a bit hot on the back in the warm weather but otherwise no complaints about the interior .\\n43 Steering nice and tight, seats a little stiff but comfortable .\\n44 We wanted three things, heated seats and mirrors and an easy to get out of back seat for some aging friends .\\n45 Ride is superior, comfortable seats, radio excellent .\\n46 5 Seats= Like sitting on a church pew .\\n47 Leather seats are the only thing of good quality .\\n48 Problems with steering wheel, windows & seals, seats .\\n49 Smooth responsive acceleration,top of the line high quality supple comfy leather seats .\\n50 Also, amazing leg space in front AND back seats , the Accord could almost be considered a full size sedan .\\n51 5L V6 scoots sporty handling and acceleration good sporty leather seats highway gas mileage appearance package worth having no dealer service yet Negatives :\\n52 First off the new body style is very appealing and the new seats are more forgiving for larger men .\\n53 The heated seats for me and my passenger are a plus for the cold weather .\\n54 hard seats, hard ride, more road noise than expected, disappointing gas mileage .\\n55 The seats are supportive and the materials are great .\\n56 You get a V, 6, heated leather seats, XM, 18 rims .\\n57 Cloth front seats big & comfortable .\\n58 Seats are stiff but once adjusted seem to become more comfortable .\\n59 The seats are very firm, but getting used to this .\\n60 The seats in my 2008 which is just like a 2009 are considerably less than I'm used to from Honda .\\n61 The only hiccup I can report is that I think that the seats in our 2008 Odyssey are a bit more comfortable .\\n62 Don't get me wrong, the Accord is a comfortable car, I am just a big guy and the seats just feel like they could use a little more of something .\\n63 I have two herniated disks and the seats of the Honda have alleviated the pain in my legs and back when I drive .\\n64 Additionally, the standard seats are not my favorite .\\n65 Although it's a lower trim level, it has high quality interior trim very comfortable seats and and very smooth, quiet ride .\\n66 Decent accel, huge back seat for my kids baby seats large friends .\\n67 we don't need moonroof, heated seats side mirrors we live in S .\\n68 With the leather seats, comfort is close to EX, L's at a best buy price .\\n69 Seats are a bit too firm for me .\\n70 Leather seats are very comfortable .\\n71 The inside and outside pads should ALWAYS wear evenly Always had stiff ride and seats .\\n72 I have a bad lower back, and the lumbar support on the seats is a life saver !\\n73 Front seats much more comfortable .\\n74 The satellite radio cuts out constantly, the heated seats are barely warm, the sound system is pathetic and the brakes wore out around 15,000 miles google it .\\n75 We are both tall, 5'11'' and 6'2 and have no problems with the seats .\\n76 After driving it for a few months I found the seats are tough on the lower back on long runs and it need a few more inches to go back .\\n77 Seats are too firm and leather is quite hard in character and feel .\\n78 I was slightly concerned about all the reviews with the seats being uncomfortable .\\n79 I love the seats, they are supportive .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cluster_label\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 5,\n \"samples\": [\n 3,\n 0,\n 2\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 12 + } + ], + "source": [ + "document_df['cluster_label'] = cluster_label\n", + "document_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "990069e8-f240-4597-a360-e4be8e3a431c", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "990069e8-f240-4597-a360-e4be8e3a431c", + "outputId": "04e8476d-2bee-43a5-e6e1-ce294d7513dd" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "49 /content/drive/MyDrive/topics/bathroom_bestwestern_hotel_sfo \n", + "26 /content/drive/MyDrive/topics/food_holiday_inn_london \n", + "22 /content/drive/MyDrive/topics/food_swissotel_chicago \n", + "48 /content/drive/MyDrive/topics/free_bestwestern_hotel_sfo \n", + "42 /content/drive/MyDrive/topics/location_bestwestern_hotel_sfo \n", + "23 /content/drive/MyDrive/topics/location_holiday_inn_london \n", + "40 /content/drive/MyDrive/topics/parking_bestwestern_hotel_sfo \n", + "36 /content/drive/MyDrive/topics/price_amazon_kindle \n", + "35 /content/drive/MyDrive/topics/price_holiday_inn_london \n", + "31 /content/drive/MyDrive/topics/room_holiday_inn_london \n", + "45 /content/drive/MyDrive/topics/rooms_bestwestern_hotel_sfo \n", + "24 /content/drive/MyDrive/topics/rooms_swissotel_chicago \n", + "38 /content/drive/MyDrive/topics/service_bestwestern_hotel_sfo \n", + "30 /content/drive/MyDrive/topics/service_holiday_inn_london \n", + "27 /content/drive/MyDrive/topics/service_swissotel_hotel_chicago \n", + "39 /content/drive/MyDrive/topics/staff_bestwestern_hotel_sfo \n", + "19 /content/drive/MyDrive/topics/staff_swissotel_chicago \n", + "\n", + " opinion_text \\\n", + "49 The room was not overly big, but clean and very comfortable beds, a great shower and very clean bathrooms .\\n0 The second room was smaller, with a very inconvenient bathroom layout, but at least it was quieter and we were able to sleep .\\n1 ... \n", + "26 The room was packed to capacity with queues at the food buffets .\\n0 The over zealous staff cleared our unfinished drinks while we were collecting cooked food and movement around the room with plates was difficult in the crowded circumstances .\\n1 ... \n", + "22 The food for our event was delicious .\\n0 ... \n", + "48 The wine reception is a great idea as it is nice to meet other travellers and great having access to the free Internet access in our room .\\n0 They also have a computer available with free internet which is a nice bonus but I didn't find that out till the day before we left but was still able to get on there to check our flight to Vegas the next day .\\n1 ... \n", + "42 Good Value good location , ideal choice .\\n0 Great Location , Nice Rooms , Helpless Concierge\\n1 ... \n", + "23 Great location for tube and we crammed in a fair amount of sightseeing in a short time .\\n0 All in all, a normal chain hotel on a nice lo... \n", + "40 Parking was expensive but I think this is common for San Fran .\\n0 there is a fee for parking but well worth it seeing no where to park if you do have a car .\\n1 ... \n", + "36 If a case was included, as with the Kindle 1, that would have been reflected in a higher price .\\n0 lower overall price, with nice leather cover .\\n1 ... \n", + "35 All in all, a normal chain hotel on a nice location , I will be back if I do not find anthing closer to Picadilly for a better price .\\n0 ... \n", + "31 We arrived at 23,30 hours and they could not recommend a restaurant so we decided to go to Tesco, with very limited choices but when you are hingry you do not careNext day they rang the bell at 8,00 hours to clean the room, not being very nice being waken up so earlyEvery day they gave u... \n", + "45 Great Location , Nice Rooms , H... \n", + "24 The Swissotel is one of our favorite hotels in Chicago and the corner rooms have the most fantastic views in the city .\\n0 The rooms look like they were just remodled and upgraded, there was an HD TV and a nice iHome docking station to put my iPod so I could set the alarm to wake up with my music instead of the radio .\\n1 ... \n", + "38 Both of us having worked in tourism for over 14 years were very disappointed at the level of service provided by this gentleman .\\n0 The service was good, very friendly staff and we loved the free wine reception each night .\\n1 ... \n", + "30 not customer, oriented hotelvery low service levelboor reception\\n0 The room was quiet, clean, the bed and pillows were comfortable, and the serv... \n", + "27 Mediocre room and service for a very extravagant price .\\n0 ... \n", + "39 Staff are friendl... \n", + "19 The staff at Swissotel were not particularly nice .\\n0 Each time I waited at the counter for staff for several minutes and then was waved to the desk upon my turn with no hello or anything, or apology for waiting in line .\\n1 ... \n", + "\n", + " cluster_label \n", + "49 0 \n", + "26 0 \n", + "22 0 \n", + "48 0 \n", + "42 0 \n", + "23 0 \n", + "40 0 \n", + "36 0 \n", + "35 0 \n", + "31 0 \n", + "45 0 \n", + "24 0 \n", + "38 0 \n", + "30 0 \n", + "27 0 \n", + "39 0 \n", + "19 0 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
filenameopinion_textcluster_label
49/content/drive/MyDrive/topics/bathroom_bestwestern_hotel_sfoThe room was not overly big, but clean and very comfortable beds, a great shower and very clean bathrooms .\\n0 The second room was smaller, with a very inconvenient bathroom layout, but at least it was quieter and we were able to sleep .\\n1 ...0
26/content/drive/MyDrive/topics/food_holiday_inn_londonThe room was packed to capacity with queues at the food buffets .\\n0 The over zealous staff cleared our unfinished drinks while we were collecting cooked food and movement around the room with plates was difficult in the crowded circumstances .\\n1 ...0
22/content/drive/MyDrive/topics/food_swissotel_chicagoThe food for our event was delicious .\\n0 ...0
48/content/drive/MyDrive/topics/free_bestwestern_hotel_sfoThe wine reception is a great idea as it is nice to meet other travellers and great having access to the free Internet access in our room .\\n0 They also have a computer available with free internet which is a nice bonus but I didn't find that out till the day before we left but was still able to get on there to check our flight to Vegas the next day .\\n1 ...0
42/content/drive/MyDrive/topics/location_bestwestern_hotel_sfoGood Value good location , ideal choice .\\n0 Great Location , Nice Rooms , Helpless Concierge\\n1 ...0
23/content/drive/MyDrive/topics/location_holiday_inn_londonGreat location for tube and we crammed in a fair amount of sightseeing in a short time .\\n0 All in all, a normal chain hotel on a nice lo...0
40/content/drive/MyDrive/topics/parking_bestwestern_hotel_sfoParking was expensive but I think this is common for San Fran .\\n0 there is a fee for parking but well worth it seeing no where to park if you do have a car .\\n1 ...0
36/content/drive/MyDrive/topics/price_amazon_kindleIf a case was included, as with the Kindle 1, that would have been reflected in a higher price .\\n0 lower overall price, with nice leather cover .\\n1 ...0
35/content/drive/MyDrive/topics/price_holiday_inn_londonAll in all, a normal chain hotel on a nice location , I will be back if I do not find anthing closer to Picadilly for a better price .\\n0 ...0
31/content/drive/MyDrive/topics/room_holiday_inn_londonWe arrived at 23,30 hours and they could not recommend a restaurant so we decided to go to Tesco, with very limited choices but when you are hingry you do not careNext day they rang the bell at 8,00 hours to clean the room, not being very nice being waken up so earlyEvery day they gave u...0
45/content/drive/MyDrive/topics/rooms_bestwestern_hotel_sfoGreat Location , Nice Rooms , H...0
24/content/drive/MyDrive/topics/rooms_swissotel_chicagoThe Swissotel is one of our favorite hotels in Chicago and the corner rooms have the most fantastic views in the city .\\n0 The rooms look like they were just remodled and upgraded, there was an HD TV and a nice iHome docking station to put my iPod so I could set the alarm to wake up with my music instead of the radio .\\n1 ...0
38/content/drive/MyDrive/topics/service_bestwestern_hotel_sfoBoth of us having worked in tourism for over 14 years were very disappointed at the level of service provided by this gentleman .\\n0 The service was good, very friendly staff and we loved the free wine reception each night .\\n1 ...0
30/content/drive/MyDrive/topics/service_holiday_inn_londonnot customer, oriented hotelvery low service levelboor reception\\n0 The room was quiet, clean, the bed and pillows were comfortable, and the serv...0
27/content/drive/MyDrive/topics/service_swissotel_hotel_chicagoMediocre room and service for a very extravagant price .\\n0 ...0
39/content/drive/MyDrive/topics/staff_bestwestern_hotel_sfoStaff are friendl...0
19/content/drive/MyDrive/topics/staff_swissotel_chicagoThe staff at Swissotel were not particularly nice .\\n0 Each time I waited at the counter for staff for several minutes and then was waved to the desk upon my turn with no hello or anything, or apology for waiting in line .\\n1 ...0
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"document_df[document_df['cluster_label']==0]\",\n \"rows\": 17,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 17,\n \"samples\": [\n \"/content/drive/MyDrive/topics/bathroom_bestwestern_hotel_sfo\",\n \"/content/drive/MyDrive/topics/food_holiday_inn_london\",\n \"/content/drive/MyDrive/topics/location_holiday_inn_london\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 17,\n \"samples\": [\n \" The room was not overly big, but clean and very comfortable beds, a great shower and very clean bathrooms .\\n0 The second room was smaller, with a very inconvenient bathroom layout, but at least it was quieter and we were able to sleep .\\n1 Large comfortable room, wonderful bathroom .\\n2 The rooms were nice, very comfy bed and very clean bathroom .\\n3 Bathroom was spacious too and very clean .\\n4 The bathroom only had a single sink, but it was very large .\\n5 The room was a standard but nice motel room like any other, bathroom seemed upgraded if I remember .\\n6 The room was quite small but perfectly formed with a super bathroom .\\n7 You could eat off the bathroom floor it was so clean .\\n8 The bathroom door does the same thing, making the bathroom seem slightly larger .\\n9 bathroom spotless and nicely appointed .\\n10 The rooms are exceptionally clean and also the bathrooms .\\n11 The bathroom was clean and the bed was comfy .\\n12 They provide you with great aveda products in the bathroom .\\n13 Also, the bathroom was a bit dirty , brown water came out of the bath tub faucet initially and the sink wall by the toilet was dirty .\\n14 If your dog tends to be a little disruptive or on the noisy side, there is a bathroom fan that you can keep on to make noise .\\n15 The bathroom was big and clean as well .\\n16 Also, the bathrooms were quite well set up, with a seperate toilet shower to basin, so whilst one guest is showering another can use the basin .\\n17 The bathroom was marble and we had luxurious bathrobes and really, every detail attended to .\\n18 It was very clean, had a beautiful bathroom, and was comfortable .\\n19 The bed was comfortable and the bathroom was clean with a nice selection of toiletries .\\n20 The bathroom was an adequate size .\\n21 First, from day one our bathroom had a urine smell that never went away .\\n22 Otherwise the bathroom was decent enough , decent temperature and decent water pressure .\\n23 Bathroom shower curtain reeked of mildew enough to smell up the room .\\n24 The bed was comfortable and the rooms and bathrooms were kept clean and although the refrigerators are honour bars the hotel is happy for you to chill your own drinks in them .\\n25 The room was very nice, and had a nice bathroom .\\n26 The room was wonderful with great beds, a nice bathroom and we also had an excellent view of Coit Tower as well .\\n27 The room was small, with a king bed, and a truly claustrophobic bathroom .\\n28 Amenities , While this hotel isn't a luxury property, they have some nice touches like marble bathrooms, mini bar, room service and an evening wine reception every day .\\n29 The bathroom was clean, well lit, and always well stocked with shampoo etc and towels .\\n30 The only odd thing was the bathroom door and room door opened outwards into the room and hallway respectively .\\n31 Room spacious 2 double beds gave us plenty of room, the beds were comfortable and the bathroom was a good size .\\n32 The bathroom was large and included a mounted makeup mirror .\\n33 The rooms are abit smallish , but immaculately maintained, and tastefully decorated, with excellent bathroom facilities .\\n34 Shower bathroom was good with good shower and plenty of space .\\n35 Both the bedroom and bathroom had plenty of room .\\n36 large clean bathrooms fully stocked with everything needed .\\n37 However, when we arrived at our room there was a maintenance worker there measuring the bathroom counter, so maybe they're doing work in some units .\\n38 The room was large and very comfortable with a nice large bathroom .\\n39 There is a wall, mounted hair dryer in the bathroom .\\n40 The thing that bothered me the most was the bathroom was very dated .\\n41 There is virtually no counterspace in the bathroom at all .\\n42 Upon our arrival, there was a SLIGHT odor in bathroom but nothing worth complaining about .\\n43 The bathroom was adequate with thick, fluffy towels .\\n44 The bathroom was large and private .\\n45 The bathroom was very clean and well appointed with nice towels and toiletries, it was not big, but room enough to do what one needs to .\\n46 The Tuscan Inn room was quite nicely appointed, the bed was comfortable the chairs TV adequate, the bathroom reasonably good .\\n47 my only real complaint would be that the bathroom does not have a separate vanity area, so 2 people getting dressed had to improvise, which was kind of surprising since the bathrooms were all redone on 2005 .\\n48 The clever use of mirrors behind the bed helped to create the illusion of space, however, in reality the room was cramped and with two of us trying to use the hand basin and bathroom at the same time was particularly awkward .\\n49 The bathroom containing the toilet and the shower was also very small, not to mention the sink and counter directly outside of it .\\n50 Turning the bathroom light on also turns the counter light on, meaning a middle, of, the, night trip to the bathroom means the whole side of the room gets illuminated and the wooden shutters that were installed in place of traditional curtains to add to the hotel's theme do absolutely nothing to keep the room dark once the sun comes up .\\n51 The room was a good size but the bathroomm was very small .\\n52 Bathroom was adequate and clean and there was a hairdryer .\\n53 The wash basin was in the room without any privacy and there was a small bathroom for the toilet and bath shower .\\n54 The bathroom had not been remodeled in alignment, but it was all very clean and perfectly acceptable .\\n55 The bathroom had several problems .\\n56 Bathrooms were also very nice .\\n57 The shower stall could have been bigger as the bathroom itself was pretty large .\\n58 Then they gave us a room which had a view of a wall, a tiny bathroom so small in fact that the sink had to be in the bedroom .\\n59 The room is not the most modern room but there was tons of space especially in the bathroom .\\n60 We may have had an ADA room because it was pretty big with large bathroom , it was room 459 , and the room had all the amenities we were looking for .\\n61 The room and bathroom were perfect in size, just what is needed .\\n62 The only possible complaint was that the sink in the bathroom had a crack in it, but it did not bother me enough to ask for a different room .\\n63 Bathrooms, though, are plenty big .\\n64 Although the rooms were clean and fresh, one of ours had several small problems , the phone didn't work, the bathroom door handle was quite loose, and the thermostat didn't work properly .\\n65 It represents value for money, the rooms and bathrooms were impeccably clean, fresh linen daily, and the staff extremely helpful and friendly .\\n66 There were plenty of thick towels in the bathroom, and all the usual toiletries, hair, dryer, etc .\\n67 I really didn't get a chance to experience the staff's level of service but the rooms are small as is the bathroom .\\n68 The bathroom was also small it was difficult to close the door once inside to avoid the door hitting you no joke !\\n69 Some rooms had the bathroom sink outside the bathroom, which we would have preferred, but our sink was inside the bathroom .\\n70 The bathroom was clean and bright and the toiletries were so good that we took the leftovers home because there was a website selling the shampoo listed on the bottle .\\n71 The rooms were very nice, could of use just a little more shelf space by the bathroom sink .\\n72 The bathroom was clean but a little dated .\\n73 The only thing wrong with the room was the bathroom, it was not up to the standard of the rest of the decor but it was clean and large enough .\\n74 The bathroom was just okay, but for the price we survived .\\n75 Hair dryer in bathroom constantly fell in sink from it's holder when anyone used the door to our room .\\n76 The reasonable price of the hotel allowed us to book 2 rooms, thus giving the 4 of us a bit more space and 2 bathrooms .\\n77 Plenty of room in the bathroom .\\n78 Nice clean rooms and a spaciousbathroom .\\n79 The only minor downside, as a few others have mentioned, is the bathroom sink lighting .\\n80 Did not like the bathroom light shining into bedroom .\\n81 Only negative is the bathroom area is a little small .\\n82 Our suite we had was small there was pubic hair on the bathroom floor from ?\\n83 bathroom a little on the older side .\\n84 The bathroom needed a face, lift also .\\n85 The bathrooms are quite small compared to other hotels but adequate .\\n86 The hotel was of a good standard, big clean rooms, decent bathroom and the free wine reception in the evening was an added bonus .\",\n \" The room was packed to capacity with queues at the food buffets .\\n0 The over zealous staff cleared our unfinished drinks while we were collecting cooked food and movement around the room with plates was difficult in the crowded circumstances .\\n1 There are a couple pubs, a great patisserie and even fast food restaurants within a block .\\n2 The neighborhood is an upscale residential area full of restaurants in easy walking distance ranging from fast food to up, scale with a wide variety of cuisines , , we never had a bad meal .\\n3 The food was wonderful, a selection of sandwiches, salads, cous cous and spicy wedge potato's, fruit salad and a cake was a good fill up when needed .\\n4 Full English breakfast was included in our rate and was very good indeed , staff were busy clearing tables promptly and fresh food kept arriving all the time .\\n5 One local restaurant stood out for having excellent food, Olives located one block away .\\n6 , Great location , Very good selection of food for breakfast buffet .\\n7 I can't see what sets it apart from other 3, star hotels I've stayed in , other than the fact it's in London, in a posh area and has good food .\\n8 We ate breakfast at the hotel a couple of days and thought it was overprice for the quality of food .\\n9 There are plenty of restaurants in the area as well, including fast food joints and two small, ish supermarkets .\\n10 They also have a great room service menu and was surprised at the big portions and quality of the food, great to get a bit in your room after a night on the town .\\n11 Breakfast equally tired , although a reasonable selection of food, general ambience in restaurant more like a youth hostel .\\n12 The breakfast buffet full English breakfast was fantastic with a very good selection of food .\\n13 really nice hotel for buissnessnot much around in terms of shoppin etcfood was ok\\n14 Everything about this hotel was first class including the food !\\n15 The nicest surprise was how fantastic the food was which I hadn't expected in a large chain hotel .\\n16 It is very convenient to the Gloucester Road tube stop, grocery store, drug store and fast food places .\\n17 I ordered room service one night, and the food was delightful, and the service was fast and friendly .\\n18 The location is just around the corner from the tube, Boots and Waitrose right next door, close to many restaurants including fast food if you like .\\n19 Talking about food, something worth noticing is that there was a fridge in the room, but it was completely reserved for the mini, bar service beverages, which completely filled it .\\n20 There was a massive queue for the restaurant, the food was beginning to run low we went down at 9 .\\n21 There were Italian, Indian, British, American fast food, and Thai restaurants very close to the hotel on Cromwell Gloucester Rds .\\n22 Room service is expensive but good, the food was delivered hot and was tasty but was chosen from the current uninspired Holiday Inn room service menu, when I ordered a \\u00a36 .\\n23 You could buy food from Sainsburys or Waitrose which were 2 minutes away to save money .\\n24 Food Drink a little pricey in local establishments .\\n25 95 if you want hot food as well .\\n26 Note that all around the hotel are decent little cafes and shops to get either full breakfasts or breakfast foods .\\n27 We ate on evening once at the Garfunkels pub in the mall, it was typical chain restaurant food but fast with good service .\\n28 There was an adequate self service buffet, not a huge selection or very well presented, cloths were not changed when food got spilt .\\n29 Not exactly what most tourists are looking for but when you have been out of the states as long as we have you eat fast food when you get the chance !\\n30 There is no mini, fridge in standard rooms, so you can't store any food , the hotel used to have mini, fridges .\\n31 Poor customer service, bad and overpriced pub food .\\n32 There is a grocery store close by that you can pick up food and a Starbucks nearby .\\n33 As mentioned, there are several places to buy food if you're going cheap :\\n34 The hotel is just a couple of minutes walk from the nearest tube station and also has a Waitrose , Tesco and various Fast Food joints and restaurants nearby .\\n35 Shame that we had to use the forum restaurant this morning prior to check out , this restaurant is on the first floor and is one of the buffet style breakfasts so lukewarm food and very busy .\\n36 The food is very, very good and the staff were very friendly .\\n37 The hotel itself was very pleasant , the staff friendly and helpful and I can only comment on the breakfasts as this was the only meal that we had there , the food was excellent with a wide variety of choice .\\n38 The food was excellent, the service was very friendly and the prices cheap .\\n39 The food is excellent and the service great .\\n40 The bar food actually looked pretty inviting as it passed by .\\n41 If you like Indian food we ate at the Dehli Brassiere it was exellent and more reasonably priced .\\n42 I would recommendeating out as the evening food is frozen re, heat type and for the price you are paying it is not simply worth it .\\n43 You can buy drinks and breakfast food at a Waitrose supermarket and Tesso express mart next door .\\n44 The area has a few pubs, a couple of steak places, a number of Indian restaurants and some fast food, so it's convenient for that .\\n45 Within 200 yards of leaving the hotel and heading to the Tube Station you have a number of fast food outlets, highstreet Restautants, Pastry shops and supermarkets, so if you did wish to live in your hotel room for the duration of your stay, you could do !\\n46 as for the continental breakfast taste was good but became boring after the 3rd day the food served wasnt changed .\\n47 We ate in the bistro downstairs and the food was very good , although the portions varied significantly depending on the chef that night .\\n48 The buffet breakfast is ok although not the best I've had and usually includes a selection of fresh fruit as well as the usual 'full english' The food in the ground floor restaurant is good I haven't had problems with room service although the menu has recently changed and doesn't have as good a selection as it did .\\n49 When the food arrive it was the wrong order .\\n50 I can also tell you that there is nothing fantastic about the food .\\n51 While travelling out of London to any of the popular destinations, food can be pretty expensive .\\n52 The rooms have never disappointed and the food is always nice .\\n53 Breakfast was OK, great choice, but the cooked food was a bit tepid .\\n54 The area is really safe with great food, boots, tesco, waitrose burger king, kfc and starbucks .\\n55 Additionally, they recommended the Cafe Forum which was about two blocks from the hotel for breakfast, the prices were reasonable and food was excellent .\\n56 00, good quality food, lots of choice, continental, full english, hot and fresh, very friendly staffs .\\n57 There is 24 hour room service, a restaurant, and a tavern in the hotel although we did not sample the hotel food .\\n58 Many hotels I have stayed in the food has been rarely hot .\\n59 The bed was very comfortable, and the empty refrigerator was a great place to store food and beverages .\\n60 Within easy reach you have all you could want peaceful areas and shops and food outlets .\\n61 I can't comment on any of the hotel restaurants or food as we never ate there with so many other choices nearby .\\n62 Avoid the food in the hotel restaurant as it is ridiculously overpriced .\\n63 Also there is a nice bistro around the corner with very good food that is moderately priced .\\n64 The food here is great, we had breakfast brought to our room, although pricy well worth it .\\n65 Minimall with Boots pharmacy, Whole Foods type ritzy fullservice market, coffee shops, etc .\\n66 Would not recommend the Patisserie food looked overpriced, pastries were dry !\\n67 Food is overpriced everywhere due to $ to pound conversion of course .\\n68 there are a variety of priced places to eat in the immediate area, but the food costs are always high, we ate mostly at pubs, where the beer and scotch were very reasonably priced always !\\n69 More than enough food choices with coffee or tea, juice, pastries, toast, yogurt, cereal and assorted cold cuts to please every taste .\\n70 Another good thing is that the rooms have mini, fridges and it's great for storing ready, to, eat food from Waitrose .\\n71 they mark down their food at the end of the day and you can get great deals on everything from sandwhiches to desserts at a fraction of the cost .\\n72 The food in the restaurant is terrible .\\n73 Both of these offer good variety of good food at very reasonable prices and suitable for children .\\n74 The Glouster Road tube station is just two minutes away, along with other food stores, pubs, internet cafes, restaurants etc .\\n75 Its a chain but the food was cheap and delicious !\\n76 Stunning food, amazing service .\\n77 We didn't eat at the hotel , there were some great cafe's just around the block with great food at a much better price .\\n78 If you're a family vacation traveller, you'll probably make use of the grocery store often becuse food in London is expensive when you consider the terrible USD, GPB exchange rate .\\n79 Many restaurants in the neighborhood, ranging from swanky to fast food to haute cuisine .\\n80 There are coffee and pastry shops around the corner and fast food .\\n81 There is also a grocery store in a shopping plaza on the corner where you can buy take out food, wine, etc .\\n82 It was in a fantastic position, one block to the Gloucester Road tube station there's a supermarket and fast food shops, as well as other shops nearby and opposite the station .\\n83 But it's great value for money, great location, pleasant staff, good food, and we'll be staying there again .\\n84 Food was OK, service very haphazard .\\n85 The range of food available would have satirfied anyone, all well cooked and efficiently replenished .\\n86 I didn't sample any of the food options but there are several outlets just around the hotel .\\n87 The huge coffe bar in the lobby is quite nice and offers drinks and food at good prices .\\n88 The Delhi Brasserie restaurant recommended by the hotel's concierge was a short walk, the food delicious and reasonable .\\n89 The food was good and the service was very good .\\n90 Additionally, there are numerous restaurants everywhere ranging from fast food to upscale .\\n91 There was also a more expensive English breakfast with many hot foods which was included in some room prices .\\n92 The frig doesn\\u0092t keep items cold enough for food safety \\u0096 it\\u0092s merely to slightly chill .\\n93 The Waitrose Market sells yummy food .\\n94 I want close proximity to tube station, starbucks, and food .\\n95 Food was expensive, but that is true all over London just now .\\n96 The Waitrose supermarket has many take out food options .\\n97 Another reviewer mentioned the smell of food on the 25th floor .\\n98 Very convenient, but don't stay on that floor as the smell of heating food wafts down the corridor .\\n99 The best food deal in this area is the local grocery store down the street , get your breakfast and lunch here and dine out nightly .\\n100 One block from the tube, half a block from a nice grocery store for essentials like bottled water, snacks and takeaway prepared food, tissues, etc .\\n101 Food quality was good, service prompt, everything prepared as we had ordered .\\n102 The food in their pub as far as sandwiches etc, was reasonable .\\n103 Food in Pub is excellent value .\\n104 All the 4 nights we stayed there we relished the hot Indian food takeout from the WaitRose grocery chain, which is just around the corner .\\n105 Really good Indian food is just a few blocks away .\\n106 There is an Internet cafe, laundramat and Sainsbury grocery store to the left up Cromwell Road and fast food, Banks and post offices to the right down Cromwell road .\\n107 It is in a nice neighborhood with fast food, resturants, and shopping with in walking distance .\\n108 because it has sensor to count how many times you open it for beverage service, nice area, near Starbucks, pastry shops, fast foods, supermarket, walking distances to Kensington Palace, London Natural Science Museum, Harrods, Victoria Albert Musuem, pubs, and what else could you ask for .\\n109 The food was delicious in both the Consortia and Forum restaurants in the hotel .\",\n \" Great location for tube and we crammed in a fair amount of sightseeing in a short time .\\n0 All in all, a normal chain hotel on a nice location , I will be back if I do not find anthing closer to Picadilly for a better price .\\n1 Great Price Terrific Location .\\n2 The location is absolutely wonderful .\\n3 Our main focus before booking was looking for a low price with good location .\\n4 Very Good Value , Excellent Location .\\n5 The location is ideal for travel all over the city via the Underground .\\n6 Excellent hotel in prime location .\\n7 Good Location Horrible Service Disgusting Procedures .\\n8 First and foremost, the good, yes it has good location, a block away from Gloucester Road Tube Station .\\n9 The convenient location and competitive rates finally sold us on a repeat visit .\\n10 The location of this hotel is it's best feature , two blocks from the tube on lines that run to most major attractions .\\n11 The saving grace of this hotel, is the friendly staff and its location in Kensington .\\n12 The positives were the location, a block from the Gloucster Rd .\\n13 The public areas are fine if bland, the rooms comfortable if slightly cramped, the location good for tube and bus but just a little 'distant' .\\n14 Its saving grace is its location .\\n15 The location is excellent , near to the Tube and walking distance of a lot of attractions .\\n16 Turned out to be this excellent property in a prime location .\\n17 Location could not have been better with the Gloucester Road tube station just a few minutes' walk from the hotel .\\n18 Bottom line is that I would definitely return to this property for its comfort and convenient location .\\n19 Great Location clean good place to stay !\\n20 Overall, I would recommend this hotel to friends, and would probably stay here again, because it was such a great location and clean .\\n21 Even better is the hotel's location , literally a two, minute walk around the corner and you're at the Gloucester Road Tube Station and a host of small shops, pubs and eateries .\\n22 Great stay friendly service great location .\\n23 I would say this is a better than standard HI and the location just can't be beat .\\n24 I am giving a 'very good' based on staff, rates,and location .\\n25 We liked the location and decided to stay again .\\n26 The location close to a tube station and a grocery store is ideal .\\n27 average hotel in a good location .\\n28 This hotel is in a good location .\\n29 If you want a reasonably priced place to stay in London in a convenient location, then this is a good choice !\\n30 Excellent Hotel Excellent location Would definately stay again !\\n31 In London its often hard to find good location and good customer service in the same place , The Holiday Inn Kensington Forum did that for me and I couldn't ask for more .\\n32 It's rated 4, stars, but I also stayed at an equivalently rated Marriott while in London, and a 3, star Holiday Inn Express in Scotland, and the service and rooms were much better at the other locations .\\n33 great hotel in a lovely location .\\n34 Excellent location next to Gloucester Road tube station that has 3 train lines making getting around London really easy .\\n35 Good location one excellent concierge but problems .\\n36 The location of the hotel is really good .\\n37 Great Location for Sightseeing .\\n38 Efficient hotel with a good location .\\n39 The location is a block away from the underground station on the Picadilly Line direct from Heathrow Airport .\\n40 Excellent Hotel , Great Location .\\n41 Good Location New Room Bad Service .\\n42 The hotel was a great location just 1 block from Tube, Grocery Stores, Pharmacy and 2 blocks from Natural History and Victoria Albert Museums .\\n43 Convenient location not 4, star room and services but OK .\\n44 Great location but definitely NOT a 4 star hotel .\\n45 LOCATION , this hotel is located around the block from the Gloucester tube station and a few ATM machines .\\n46 Great location but is it really 4 star ?\\n47 , Great location , Very good selection of food for breakfast buffet .\\n48 The location was only a five minute walk from the Gloucester Road Tube stop .\\n49 Great location, near Gloucester Road tube station, handy cluster of cafes, shops, couple of pubs, plus supermarket in the station complex .\\n50 For the price and location, this was a very great hotel .\\n51 Good location clean and comfortable .\\n52 Great location but not sure it's worth the money .\\n53 What you are really paying for at this hotel is location and in hotel restaurants .\\n54 Fantastic location very close to the tube and buses .\\n55 It was a pretty good value and in a good location .\\n56 We wanted something more spacious, but this hotel had extremely convenient location and good reviews, so we decided to stay there .\\n57 The positives, great location, just a few minutes from a tube station which makes touring easy and with a travelcard taking midday breaks is easy .\\n58 Apart from the location, the hotel was really not up to standard .\\n59 It is a great location, the rooms are a bit basic, but clean and we actually got a pretty good view this time .\\n60 excellent location friendly staff .\\n61 went for a city break with the family hotel good location harrods 20 mins walk,royal albert hall 10 mins,and under ground around the corner,plenty to see and do around hotel .\\n62 One good aspect of this hotel was the location, it is about 2 blocks to the tube station, shopping and eating .\\n63 Not too easy to find rooms for more than two people in London unless you compromise on a few things, such as cost, location etc .\\n64 Location is not very good since one has to travel by tube to shop or sightsee .\\n65 The location to the Gloucester Road tube station was very handy .\\n66 We chose it due to its location i .\\n67 Great location for first time traveller .\\n68 When I approached one stewardess, she assured me that her airline used Holiday Inn Kensington Forum on a regular basis because of its location .\\n69 Hotel was super average nothing great about it at all except the location .\\n70 Since everyone starts with the good that I agree with , great location, very clean, I'll state the not, so good .\\n71 One of the best features of this hotel is the LOCATION .\\n72 The hotel's location is perfect for sightseeing and shopping and the Tube .\\n73 Location great but hotel dated .\\n74 Tower block hotel in fantastic location near good shops, bars and restaurants .\\n75 The positives about the place are the views from the windows if you have an upper floor room, and the location next to Gloucester Road tube station and a small shopping area .\\n76 For a little extra money, the soon to be Crowne Plaza over the road offers far better service yet with the same great location\\n77 Nice hotel with great location for transportation .\\n78 We've stayed at this hotel before and it's always been a great choice for it's location, cleanliness and staff .\\n79 very good location, next to underground station, very near to city center .\\n80 Convenient location Great Concierge service .\\n81 It isn't the most central location but I found it easy enough to get into London .\\n82 I would definitely stay here again for the location and the great customer service .\\n83 Great location and above average rooms .\\n84 For the price and the location I thought this place was great .\\n85 The location is just around the corner from the tube, Boots and Waitrose right next door, close to many restaurants including fast food if you like .\\n86 Its location is probably the first thing worth mentioning, being a 10 minutes walk from the natural history museum, a 15 minutes walk from beautiful Hyde Park and just behind the corner of the Gloucester Road underground station .\\n87 Even otherwise, no matter if it's going to cost you a bit more, I'd still recommend it, considering its location and overall standards .\\n88 There was a lot of road noise, but this is only to be expected, given the location .\\n89 Location is great, 5 mins walk to the Natural History Museum, 15 to Kensington High St and 2 mins to the tube and in a high room you can see for miles .\\n90 Location was excellent with close proximity to tube station We will definitely stau here again , good value\\n91 Great location for the tube and bus !\\n92 Also it is perfect for the Gloucester Road tube station with direct trains to Heathrow airport terminals,very good location turn right as you exit the station the hotels a 3 minute walk on your right hand side .\\n93 Location is very close to Gloucester Road Tube so easy to get into central london for the tourist sites .\\n94 Some positives are that it is in a good location for the tube .\\n95 It's a great location , literally a minute's walk to Gloucester Road tube station, 5 mins walk to the Victoria Albert Museum and the British Science Museum .\\n96 But for the price, and the favourable location, we were content .\\n97 pleasant hotel very good location .\\n98 Great location for all London has too offer .\\n99 The hotel is in a very good location for touring London .\\n100 Clean rooms, great location, close to the Gloucester Tube entrance .\\n101 The one standout is location , , it's only about a block from the Gloucester Rd tube station, which is on the Picadilly line that connects to Heathrow, so being on the west side of London, it's a shorter ride to and from aiport and a very short walk to your hotel with no changes, and then you are close to public transport for the rest of your stay .\\n102 Good hotel for the price nice location .\\n103 No noise problems and a nice, convenient location .\\n104 Perfect Location and Excellent Hotel .\\n105 Room , clean, good size, everything you need is in the room including the coolerLocation , within every attractions, short walk or you can take the double decker just across the street .\\n106 Great location , good value place to stay .\\n107 The Holiday Inn Kensington Forum benefits from a fantastic location, right next to Gloucester Road Tube or to Paddington Station for the Heathrow Express .\\n108 Believe me, the location alone is worth the stay .\\n109 The location is fantastic near Gloucester Station which was very handy for all our needs in transport !\\n110 The breakfast we had 1 morning was to say the least quite incredible there was so much variety, there was also no complaint in this area with the staff they were right on the ball helpfulThis hotel while being high rise had some low moments for us as we felt some areas were really lacking but the hotels location is superb and staff like Peter did try and make your stay worth while .\\n111 The location is South West London and a healthy but doable walk from landmarks like the Museum of Natural History, Albert's Hall, Kensington Gardens, and Harrods .\\n112 LOCATIONA block from Gloucester Road Tube which is conveniently on the Piccadilly, District Circle lines .\\n113 Other reviewers are right, the entrance is in a bizarre location but once you figure it out, it's fine .\\n114 Nice clean rooms, good value, and average location near a tube station, but the rooms directing towards the main street outside are all VERY noisy .\\n115 Terrific location wonderful staff excellent pub !\\n116 This was our first trip to London and we found the location to be excellent .\\n117 Lovely hotel, terrific location, wonderful helpful staff, immaculately clean rooms .\\n118 Great location, 1 min from Gloucester Tube .\\n119 Excellent location good value .\\n120 Excellent location in the nice and relatively quiet area 100m from Tube station and shops restaurants .\\n121 The hotel's location is the best thing about it , near the tube stop, museums and Kensington High Street .\\n122 For our purposes, the hotel was perfectly adequate , the location was good and the room was clean and quiet .\\n123 Good location but need upgrade .\\n124 I really love the location of this hotel .\\n125 But again, the location could justify charging that price .\\n126 The hotel is very nice and the location is excellent .\\n127 If you're looking for a no, frills hotel that is all about location and price, this is your place .\\n128 All, in, all this hotel was a great choice for the price and location .\\n129 The Holiday Inn Kensington Forum has a fantastic location for a city break in London .\\n130 The best thing was the location .\\n131 Good location ,near the tube .\\n132 Good price location but no thrills .\\n133 The location is great , very close to Gloucester Road Tube, with Waitrose supermarket, coffee shops and restaurants nearby .\\n134 Great value and awesome location .\\n135 Instead you get attractively appointed, decent, sized rooms , AC that works, a modern bathroom, plumbing that doesn't gurgle and bang in the night, iron and board, bathrobe and slippers, lots of TV channels and a location that can hardly be bettered .\\n136 The location is terrific for museum, going and the Royal Albedrt Hall is an easy walk away if you enjoy concerts .\\n137 Great Location Nice Rooms Friendly Staff .\\n138 Great location service questionable .\\n139 Like other reviews, the location of the hotel is great, seconds around the corner from the tube .\\n140 Location wise, the tube station is just around the bend and key restaurants Bugis St .\\n141 Great location, close to the Underground and several excellent Pubs .\\n142 Everything was clean, the staff were very friendly and helpful and the location was excellent, all at a relatively cheap cost .\\n143 Location can't be beat, right on bus lines, next to tube station .\\n144 A nice hotel a resonable rate and a great location .\\n145 Location of hotel is great, next to Gloucester Road tube, close to museums, short hike to Buckingham Palace etc .\\n146 Location is the only thing it has going for it .\\n147 Great location, okay value and what you would expect .\\n148 On the positive side the location of Holiday Inn Forum was very handy for a conference I was attending .\\n149 The location is superb with the tube and bus stops literally steps away .\\n150 Nice location by Glouchester tube stop .\\n151 The best part about the hotel is the great location in Kensington .\\n152 Great Location and great business hotel .\\n153 Holiday Inn Kensington Forum is a perfect no fuss business hotel with fantastic location .\\n154 Great location pub in the ground floor .\\n155 Having never been to London, I found it easy to get around to places of interest from this location .\\n156 great location great breakfast !\\n157 Great location , we did what others have descibed and turned along Cromwell road and went to the other Holiday Inn in error when we first arrived .\\n158 This was my second stay at this location in the past one year .\\n159 The hotel is in an excellent location only a short walk to Gloucester Rd .\\n160 The location of the hotel is excellent, in a very nice area right next to the Gloucester Road tube station and direct on the picadilly line from Kings cross .\\n161 We thought this was a great value for such a great location .\\n162 Great location for vacationer .\\n163 The hotel was good and in a great location .\\n164 You cannot beat the location !\\n165 Coming from Cardiff, the location was perfect, as it was straight off the M4 and a short drive on the A4 before reaching the hotel .\\n166 it's just a great location, period .\\n167 This hotel provided that and a great location to boot !\\n168 the hotel is in a good location .\\n169 Convenient Location for Tourists .\\n170 Great location close to Gloucester Road tube stop .\\n171 Would definitely recommend this hotel if only for the fair price I got on priceline combined with the great, convenient location, which made it easy to get to all the touristy sites in London .\\n172 Convenient to Gloucester Road tube station, , location could not have been better .\\n173 Great location with cafes, restaurants and grocery stores all around .\\n174 All in all a clean room, great location near hyde park and all the stuff in kensington chelea, near tube station , quiet area .\\n175 Great location clean and quiet .\\n176 Location is excellent to the tube stations .\\n177 The good thing about this hotel is its location, you are a 10 minute walk from Harrods and \\u00a313 taxi ride to Covent Garden which will take you past all the tourist attractions :\\n178 Loved the location as it's only a 1, minute walk from the Gloucester Road tube station .\\n179 I like this hotel due to its location, but the management need to get a grip .\\n180 Its in an easy location from the tube, just two minutes walk .\\n181 The hotel has an unbeatable location in a very nice part of South Kensington , only 1 block from the Gloucester Road station .\\n182 The location of the hotel is fine and actually the hotel is not extremely bad but it is extremely EXPENSIVE .\\n183 We've stayed in London a lot and booked this hotel for one night due to a number of factors , the location, the price the availibility of a room to accomodate three adults .\\n184 The hotel itself is truly in a great location , on the same road as the major London museums it took a leisurely 5, 10 minutes to stroll to the wonderful Natural History Museum a further 5, 10 minutes up the road to Harrods .\\n185 If we hadn't experienced a problem with the a c I would have rated my overall stay here 5 5 for value, location, comfort, etc .\\n186 Location itself is great, but everything else is terrible .\\n187 don t stay here unless if the Kensington location is important to you .\\n188 Geat location, clean, relatively quiet inside the rooms, somewhat confortable .\\n189 The main reasons are location and the quality of the air conditioning .\\n190 Yes, the standard rooms are small for two people and, yes, they seem to have a lot of trainee staff at the front desk, who struggle sometimes with the language, and yes some of the rooms are affected by traffic noise, but for a good location and a no, frills room provider, it is hard to beat .\\n191 Clean rooms, bustling lobby, GREAT location .\\n192 I will NOT recommend this location .\\n193 I travelled during the off, season in January to London, this was my first stay at this location and I would definitely consider doing so again .\\n194 Less than a five minute walk from the tube station and within walking distance to the Museum of Natural History, really a good location .\\n195 , , The one thing this hotel has it going for it is the location .\\n196 With a kid and a stroller, this definitely is a very convenient location .\\n197 Cromwell is a pretty posh and popular location .\\n198 A fine hotel and great location .\\n199 We could not have been happier with the location or the room for the price .\\n200 Great location indifferent service .\\n201 This being our first ever visit to UK, must say the location of the hotel, just 2min walk from Glousceter Rd tube stn was a great advantage as even during the weekend, Piccadely line remained open, though distict and central lines had some restrictions on a c of maintainence etc .\\n202 Good value and excellent location .\\n203 Booking through Priceline led me to the Holiday Inn Kensington Forum which was inexpensive, in a great location, and clean and comfortable .\\n204 The location of the hotel is great because it's about a block from the Gloucester Road Tube Station which is on several Tube lines .\\n205 In short, the location of the hotel made travel around London and getting to train stations to go out of London incredibly easy .\\n206 Overall, we felt this hotel was in a convenient location and a good deal for a London hotel .\\n207 As other reviewers mentioned, good location and lots around to do eat see enjoy .\\n208 Nice hotel with great location .\\n209 The location is excellent, just a half a block from the Glouster Rd .\\n210 Also, the tour bus most likely will not drop you off at your hotel after the tour, but rather at Victoria Station or some location nearest your hotel as the bus driver can get .\\n211 Also, the close location of the gloucester road tube stop is great for getting around all of london .\\n212 Great location , a couple of minutes walk from Gloucester Rd underground station, and shops, restaurants, internet cafe etc\\n213 Great location but don't bring the car !\\n214 The location is great however, only 5 mins walk from the Gloucester Road tube and 10 mins walk to the South Kensington museums, Albert Hall, etc .\\n215 The hotel is in an ok location , close the the Gloucester Rd tube station .\\n216 The location of the hotel was great .\\n217 Otherwise, really great location with the refrige being key .\\n218 This is our 2nd time at the Kensington Forum and love the location .\\n219 Location was great come out of tube station, take first turn right and walk 150 yards you're there !\\n220 Location was great , close to tube stop .\\n221 The location of the hotel was excellent, a 5 min stroll from Gloucester Road tube, next to tesco express and a large supermarket just around the corner .\\n222 The location is perfect, very central and very near the subway .\\n223 However the location was great with the underground and good restaurants nearby .\\n224 One of the nicest features about this hotel is the location .\\n225 So many employees, a wonderful location, an impressive building .\\n226 Well, after all, as I said, great location, great view, NOTHING ELSE !\\n227 On a positive note the location is great and the overworked staff did their best however if visiting London their are definitely better options such as the NH which is just around the corner .\\n228 Perfect location, right around the corner from the tube .\\n229 Our parents who are 55, 70 were able to wonder around the entire city by themselves due to the ideal location of this hotel .\\n230 Nothing fancy but we were quite happy with the location of the hotel, just like most who have stayed at the hotel before .\\n231 Overall, we found the hotel only good for location and decent room if somewhat cold just like the weather was in London then .\\n232 The breakfasts were excellent and the location is great for viewing London by bus, on foot and by tube , which is just at the end of the road .\\n233 Great Location, Very Clean Miami FL .\\n234 The location in the Kensington area could not have been better, the area is safe, nice and fairly quiet .\\n235 A Great Location, Friendly And Polite Staff, First Class Breakfast And Rooms As Described Above Will Have Me Returning Again And Again .\\n236 Very convenient location for Gloucester Road tube .\\n237 The location was excellent with a number of good eating options locally and Garfunkels and Ask Pizza located in a complex within a very short walking distance for kids who want something easy .\\n238 brilliant, behind tube station, near local stores, restaurant, posh area, near kensington park, great central location yet quiet enough in a cul, de, sac location .\\n239 flaw location of main entrance, big signs and big flags on main street but enter from the back, tiny miserable unwelcoming cheap entrance design, confusing to first time visitors .\\n240 the only reason to choose this hotel is its location, for other aspects, not up to standard for its price .\\n241 The Forum Holiday is a big high rise and right across the street, is another Holiday Inn, albeit it much smaller which tends to confuse people looking for that 2nd location hotel .\\n242 Great Location and Hotel for the Money .\\n243 The location in South Kensington is excellent as the Gloucester Road tube station is just around the corner and is served by 3 main lines, , District, Circle and Piccadilly .\\n244 Can't say enough about the price, quality, location and convenience of this hotel and area .\\n245 Good points excellent location really very close to the tube and the tube is on good lines so not lots of changing .\\n246 The location is in a good location near the tube and only a few minutes by cab to central London .\\n247 Although in some ways I would have preferred a smaller, more authentic English hotel, we really couldn't beat the combination of price and location .\\n248 Location is good if you plan on taking the tube .\\n249 Would recommend the Holiday Inn Kensington Forum for location, price , and cleanliness .\\n250 Decent rooms and good location .\\n251 Stayed at this hotel, for one night, as the location was ideal for our night out at the Royal Albert Hall .\\n252 As also said before, location is excellent, very near the tube stations, plenty of delis and eating places nearby and a supermarkets for any snacks we wanted for the room .\\n253 Location is great, hotel is wonderful, and price is right, it really is hard to beat right now .\\n254 good location great deal on priceline .\\n255 This hotel is in a very convenient location, just a block and a half from the Gloucester Road tube station .\\n256 Comfortable room with large bed but limited space as is often the case with London hotels, but I found the location excellent .\\n257 Stayed between Xmas and New Years and the room, location, etc were what to expect for the price I paid .\\n258 The location was great too as it was next to the tube .\\n259 Excellent location but rooms far too hot .\\n260 hotel but would stay again if the price was right due to the excellent location .\\n261 Good value in a good location .\\n262 The location was ideal for getting around London .\\n263 Which leads us to , location, this hotel's best feature .\\n264 Stay here , you won't regret it, great price , great location .\\n265 The Hotel location was absolutely perfect for sightseeing and shopping .\\n266 Overall, for the money, location, and for the piece of mind knowing that its going to be clean and comfortable, look no further .\\n267 Perfectly adequate excellent location .\\n268 THe location was great, just aroung the corner from the tube .\\n269 But we also didn't give them any hard times, so they didn't have to fake anything , The location of the hotel is just perfect .\\n270 As everyone mentions, the location was perfect for sightseeing .\\n271 , very clean, quiet, bathrooms appear to have been updated recentlyThe hotel location is great .\\n272 The location is fab , near the Gloucester underground station and the Waitrose grocery store .\\n273 Excellent location shame about the service !\\n274 Fantastic location and local amenities i .\\n275 The location is great and the Tube station is very close .\\n276 good hotel for the price and location .\\n277 Apart from that, the staff were friendly and the location is great .\\n278 The location is incredibly convenient, with lots of restaurants and easily walkable to the tube .\\n279 The single thing to recommend this hotel is the location, which is excellent .\\n280 The location is EXCELLENT, just round the corner from the subway .\\n281 Friendly helpful staff, clean and comfortable rooms and not to mention its great location .\\n282 This hotel is in a very good location , tube, buses, restaurants, shopping and museums all within very easy walking distance .\\n283 All in all, if you do not mind giving up the Euopean atmosphere, the Holiday Inn gives you a comfortable stay with the most convenient location .\\n284 Location was great being only a few yards from the Gloucester Road tube on Piccadilly, Circle and District lines and was therefore an ideal base for our sight seeing visit .\\n285 Great location and can't beat the price and the comfort !\\n286 Since this location is the designated layover site for American Airlines, there were tons of pilots and flight attendants everywhere, but that added to the familiar feeling of having Americans around .\\n287 Pleasant staff, clean hotel, comfortable beds, with a great location .\\n288 Good Price Great Location Would definately stay there again !\\n289 Anyway it may not have the charm or history of other hotels in London, but for the price location we would visit again .\\n290 Excellent location clean but small .\\n291 The best feature of this hotel is it's location .\\n292 The location is perfect with many everything you need just outside the door including a great French patisserie and coffee shop .\\n293 Best part of all is the location, loved the Gloucester Road tube station nearby and the South Kensington area in general, very safe to walk around in any time day or night .\\n294 Gloucester Road tube station is at the westernmost side of zone 1, making it a perfect location between the airport and central London .\\n295 The location of the hotel is superb , 2 minutes walk from Gloucester Road tube .\\n296 Location is hard to beat though .\\n297 The hotel was clean, the beds were comfortable and the location was great .\\n298 Maybe I'm being a little harsh so if you can get this hotel at a good rate it is probably just about worth it, as it has an excellent location .\\n299 Awesome location comfortable rooms .\\n300 Great service and perfect location !\\n301 I would definately recommed this hotel to anyone as it is unbeatable for price and location in London .\\n302 I wanted a good location, above all else, and this hotel fills that need .\\n303 For a similarly good location , you can stay at the London Hilton Metropole for the same price and receive much better service .\\n304 It's a great location and the rooms are nice and clean and yes, a bit small but definately NOT tiny .\\n305 It's a great location VERY near the Gloucester Rd tube stop .\\n306 Perfect if you are going to see the sights in London, , great location to get around from, , right downtown .\\n307 A decent hotel with a great location .\\n308 The raves about the location are well deserved .\\n309 it's a solid property, with an amazing location !\\n310 Again the location just can't be beat !\\n311 Great Location , Just fine for our stay .\\n312 Very convenient location one block from Gloucester Road tube station .\\n313 It is in a very good location for catching the tube or the Hop On Hop Off bus tour .\\n314 The hotel caters to airline personnel, cruise tourists, and is a good choice for someone that wants to have a safe location .\\n315 Good location if you want to be near the Piccadilly line to Heathrow , but otherwise very average .\\n316 Solid Deal in a Great Location .\\n317 Excellent Hotel Excellent Location !\\n318 Location wise it is a 5 min walk to the tube and you are on the circle, district and picadilly line .\\n319 The location is great though to get to the Tube and sites around West london and i got a good rate for the room .\\n320 The top feature of The Holiday Inn Kensington Forum is its location, in a superb area of London that's clean, safe and interesting .\\n321 Not impressed at all and will not stay again despite good location .\\n322 But it's great value for money, great location, pleasant staff, good food, and we'll be staying there again .\\n323 We thought this modern, efficient hotel was excellent value for such a great location in the heart of London .\\n324 Great location great breakfast bathrooms tiny .\\n325 The location of the hotel is, as stated earlier, absolutely fine and well within walking distance of the V A, Natural History Museum, Science Museum and Hyde Park .\\n326 The location can't be beat , , a two, minute walk from the Gloucester Road tube stop .\\n327 Great location, close to a tube station with a 24 hour Tesco metro nearby .\\n328 Mother was very pleased with the location and convenience .\\n329 GREAT location and bargain internet price !\\n330 The rooms are a standard European size but they are kept spotlessly clean and the hotel couldn't be in a better location .\\n331 The location of the hotel was brilliant , really nice area .\\n332 Still, if you're just looking for a cheap place to lay your head, the Holiday Inn Kensington Forum is a great location .\\n333 The location is fantastic, , you're literally around the corner from the Tube station there's a Sainsbury's supermarket right above the aforesaid Tube station .\\n334 Another plus is its location , convenient to the tube, museums, shops, etc .\\n335 This was our second stay stay at this hotel based on it's location .\\n336 b basis Hotel huge , 900 rooms Buffet breakfast good for a buffet This is a well run hotel with a great location for the metro Rooms a bit on the small side but I would stay again\\n337 The location is also good because it is literally 150 footsteps from Gloucester Road Underground Station .\\n338 I have stayed in a few hotels in London while touring but it would be difficult to find a better location in London for the tourist class who is looking for value, efficiency and cleanliness .\\n339 The location and American standards are nice touches .\\n340 The location was perfect, just a minute from the Gloucester Rd .\\n341 We were easily able to navigate the city from this location .\\n342 The hotel is clean, modern, and in an excellent location .\\n343 But we would definitely stay again because of the hotel's location .\\n344 Aside from that, the location is great and the furnishings were modern and very comfortable .\\n345 Excellent location and service .\\n346 The location is excellent, just a short walk from the Gloucester Road tube station and in a lovely neighborhood .\\n347 Overall an above average hotel based on location and price but not one for a romantic get, away !\\n348 Location is fantastic , both on bus line and underground, with many useful stores on Gloucester Rd .\\n349 This is a good basic hotel which has a terrific location .\\n350 , checked us in at 11 am after a transatlantic flight, room larger than average, compared to our continental Europe travel, location, location, location .\\n351 The location is right next to the Picadilly line tube stop, so it is very convenient to get around town and also to the airport .\\n352 Great location, grocery store open 24 hours within 5 mins walk and friendly international staff, will stay here again .\\n353 Great location , but executive room not worth it !\\n354 We enjoyed our trip to London , and the location for the Holiday Inn Kensington Forum was terrific .\\n355 I do recommend the hotel , it was clean, excellent location, there was ice on the top floor along with one microwave, etc .\\n356 Right off of the Piccadilly and Circle tube lines, the location is excellent .\\n357 It is a relatively new hotel, clean and has a great location which is close to the underground with 3 connecting lines, it gives you an advantage to go anywhere without changing lots of trains .\\n358 Fantastic location right next to Gloucester Rd tube station .\\n359 Excellent location service cleanliness and price at the Holiday Inn Kensington Forum .\\n360 All in all great location , nice restaurants nearby, nicely pitched service .\\n361 Speaking of the tube, the location really is great 1 block away !\\n362 The location of the hotel is excellent .\\n363 Like others, I liked the location with restaurants, Glouster tube station, small grocery stores, , , and internet cafes within easy walking distance .\\n364 The location of the hotel is excellent , one block from the tube Gloucester Rd and the surrounding neighborhood is fantastic , take a walk from High Street Kensington to the hotel , I'd love to live there !\\n365 Great Hotel Great Location Great Value !\\n366 The biggest advantage of this hotel is it's excellent location just off of Gloucester Road in Kensington, with the Undergroud one block away, along with several nice restaurants and pubs in the area .\\n367 Although the location is a bit removed from the West End, it is only a block away from the Gloucester Road underground, with three train lines that will take you almost anywhere in the city in 15 minutes or less .\\n368 great location good but large tourist hotel .\\n369 The location is great and very convenient .\\n370 The location is great but there are many hotels in the same area so I might try out others but would certainly consider coming back .\\n371 Can't beat the location, rooms, value and view !\\n372 Good Value Nice Hotel Fantastic Location .\\n373 Holiday Inn KF has a location that cannot be beat .\\n374 this is definitely the location you want .\\n375 Great location loved the hotel .\\n376 The tube station is right there and the location is great for getting around London .\\n377 You could not beat the location or the price .\\n378 The price is moderate for the service and the location .\\n379 I will say this hotel is in a wonderful location, right across from the gloucester tube station and only a stop or two away from Notting hill, Harrods, and Kensington High street .\\n380 Location is so convienent to the tube and grocery .\\n381 Other than room size, we were very happy with the hotel, especially its location .\\n382 Overall good hotel and very good location close to the tube .\\n383 The hotel has a great location with easy access to most of London's tourist sites .\\n384 The room is a tad small but is super clean and great location .\\n385 The price, the space, the location and the service were the exactly right thing we wanted .\\n386 Yes I do stay here a lot and as such, guess that I get extra special treatment but it is in a great location with the tube within a 2 min walk surrounded by places to eat and drink and far enough out of central London to be quiet but you can still be in the west end in 15 minutes .\\n387 GREAT LOCATION COMFORTABLE HOTEL .\\n388 Outstanding location, even an internet cafe nearby .\\n389 the hotel is in a GREAT location .\\n390 Great location, freshly renovated, very small rooms, anonymous hotel, acceptable service .\\n391 The location couldn't be better in my opinion .\\n392 Price and location can't be beat .\\n393 As said by others, an absolutely excellent location, on tube lines that will get you to just about anywhere .\\n394 The location could not have been better with being so close to the Underground station and near good restaurants, grocery stores, post office, pharmacy, Internet cafe .\\n395 The hotel is set in an absolutely ideal location, offers great rates, and excellent conceirge .\\n396 Great location, one block from the Gloucester Tube station with a number of acceptable restaurants in the area within walking distance .\\n397 Best location and unbeatable price !\\n398 This is an awesome location right near the Gloucester Road tube stop .\\n399 Definitely stay here if you are on a budget , and even if not, it's still nice and the location is really the best !\\n400 A true bargain in the London hotel market, and a very convenient location adjacent to the Gloucester road underground station .\\n401 Excellent location but a couple of problems .\\n402 The location is excellent being a few minutes walk from Gloucester Road tube station with its good connection to Heathrow airport and to central London .\\n403 Great choice in a great location .\\n404 The location could not be better , one block from the intersection of Cromwell and Gloucester Roads, with the Glouster Road tube stop .\\n405 I say fortunate because the location was perfect for my needs as a first, timer .\\n406 This is definitely a modern hotel, no English charm here, but the location and the price can't be beat .\\n407 The location could not be better and best of all it was so clean .\\n408 Everything worked well, was in good condition and the room was quiet in spite of the hotel's busy location .\\n409 Service was great and the location of the hotel was very convenient .\\n410 Great room fabulous price wonderful location !\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cluster_label\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 1,\n \"samples\": [\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 13 + } + ], + "source": [ + "document_df[document_df['cluster_label']==0].sort_values(by='filename')" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "60c76c66-cbde-44b1-a940-9a7c2808629a", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "60c76c66-cbde-44b1-a940-9a7c2808629a", + "outputId": "b675ccb9-76b2-4589-ac95-c80077c59f3a" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "50 /content/drive/MyDrive/topics/comfort_honda_accord_2008 \n", + "29 /content/drive/MyDrive/topics/comfort_toyota_camry_2007 \n", + "18 /content/drive/MyDrive/topics/gas_mileage_toyota_camry_2007 \n", + "41 /content/drive/MyDrive/topics/interior_honda_accord_2008 \n", + "33 /content/drive/MyDrive/topics/interior_toyota_camry_2007 \n", + "37 /content/drive/MyDrive/topics/mileage_honda_accord_2008 \n", + "44 /content/drive/MyDrive/topics/quality_toyota_camry_2007 \n", + "46 /content/drive/MyDrive/topics/seats_honda_accord_2008 \n", + "43 /content/drive/MyDrive/topics/transmission_toyota_camry_2007 \n", + "\n", + " opinion_text \\\n", + "50 Drivers seat not comfortable, the car itself compared to other models of similar class .\\n0 ... \n", + "29 Ride seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 Seats are fine, in fact of all the smaller sedans this is the most comfortable I found for the price as I am 6', 2 and 250# .\\n1 Great gas mileage and comfortable on long trips ... \n", + "18 Ride seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 ... \n", + "41 I love the new body style and the interior is a simple pleasure except for the center dash .\\n0 ... \n", + "33 First of all, the interior has way too many cheap plastic parts like the cheap plastic center piece that houses the clock .\\n0 3 blown struts at 30,000 miles, interior trim coming loose and rattling squeaking, stains on paint, and bug splats taking paint off, premature uneven brake wear, on 3rd windsh... \n", + "37 It's quiet, get good gas mileage and looks clean inside and out .\\n0 The mileage is great, and I've had to get used to stopping less for gas .\\n1 Thought gas ... \n", + "44 I previously owned a Toyota 4Runner which had incredible build quality and reliability .\\n0 I bought the Camry because of Toyota reliability and qua... \n", + "46 Front seats are very uncomfortable .\\n0 No memory seats, no trip computer, can only display outside temp with trip odometer .\\n1 ... \n", + "43 After slowing down, transmission has to be kicked to speed up .\\n0 ... \n", + "\n", + " cluster_label \n", + "50 1 \n", + "29 1 \n", + "18 1 \n", + "41 1 \n", + "33 1 \n", + "37 1 \n", + "44 1 \n", + "46 1 \n", + "43 1 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
filenameopinion_textcluster_label
50/content/drive/MyDrive/topics/comfort_honda_accord_2008Drivers seat not comfortable, the car itself compared to other models of similar class .\\n0 ...1
29/content/drive/MyDrive/topics/comfort_toyota_camry_2007Ride seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 Seats are fine, in fact of all the smaller sedans this is the most comfortable I found for the price as I am 6', 2 and 250# .\\n1 Great gas mileage and comfortable on long trips ...1
18/content/drive/MyDrive/topics/gas_mileage_toyota_camry_2007Ride seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 ...1
41/content/drive/MyDrive/topics/interior_honda_accord_2008I love the new body style and the interior is a simple pleasure except for the center dash .\\n0 ...1
33/content/drive/MyDrive/topics/interior_toyota_camry_2007First of all, the interior has way too many cheap plastic parts like the cheap plastic center piece that houses the clock .\\n0 3 blown struts at 30,000 miles, interior trim coming loose and rattling squeaking, stains on paint, and bug splats taking paint off, premature uneven brake wear, on 3rd windsh...1
37/content/drive/MyDrive/topics/mileage_honda_accord_2008It's quiet, get good gas mileage and looks clean inside and out .\\n0 The mileage is great, and I've had to get used to stopping less for gas .\\n1 Thought gas ...1
44/content/drive/MyDrive/topics/quality_toyota_camry_2007I previously owned a Toyota 4Runner which had incredible build quality and reliability .\\n0 I bought the Camry because of Toyota reliability and qua...1
46/content/drive/MyDrive/topics/seats_honda_accord_2008Front seats are very uncomfortable .\\n0 No memory seats, no trip computer, can only display outside temp with trip odometer .\\n1 ...1
43/content/drive/MyDrive/topics/transmission_toyota_camry_2007After slowing down, transmission has to be kicked to speed up .\\n0 ...1
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"document_df[document_df['cluster_label']==1]\",\n \"rows\": 9,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 9,\n \"samples\": [\n \"/content/drive/MyDrive/topics/seats_honda_accord_2008\",\n \"/content/drive/MyDrive/topics/comfort_toyota_camry_2007\",\n \"/content/drive/MyDrive/topics/mileage_honda_accord_2008\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 9,\n \"samples\": [\n \" Front seats are very uncomfortable .\\n0 No memory seats, no trip computer, can only display outside temp with trip odometer .\\n1 needs power seats on the passenger side .\\n2 I haven't had any back pain from the seats, maybe these people exceed the seat weight limit ?\\n3 There is a great deal of road noise in the cabin and the seats are very low quality .\\n4 Power seats are not fully adjustable .\\n5 Front seats are too narrow and not deep enough .\\n6 The seats are extremely uncomfortable .\\n7 I previously owned a 98 Avalon, and found the seats more comfortable than the Honda .\\n8 The seats in the Honda are more firm .\\n9 I'm very sad , I loved my daughter's Civic and the dealer service is fantastic, but even good service can't help the uncomfortable seats .\\n10 It cost me thousands of dollars to get rid of it, but the seats gave me and my wife back pain after 20 minutes of driving !\\n11 Although it is fun to drive and quality seems ok, the leather seats are very uncomfortable, especially on a long drive .\\n12 The seats are decent, the interior design is excellent IMO as well as the exterior design, and thus far it has been extremely reliable .\\n13 In fact, I love the car just wish Honda wouldn't have made such horrible seats .\\n14 Body wasn't used to seats like if you bought a new mattress .\\n15 The interior quality is OK, my 1999 Accord EX had a better comfort level on the seats .\\n16 I just purchased an Accord Sedan with leather seats .\\n17 Only needs to add drivers seat memory, 2, tone perforated leather, xenons, rear seat interior illumination mounted under front seats, and better tilt .\\n18 I can also fit three car seats in the back which was the reason I was able to go back the the Honda family .\\n19 The seats are very comfortable & supportive .\\n20 I test drove an EX, L and felt the seats were too firm plus, the EX, L seemed too slow .\\n21 This Accord has more road noise than I like and the seats tend to be hard, unlike my other Accords .\\n22 Engine performance lacks punch after 60, head rest are poor design, lacks driver seat memory rear seat a c, radio system is marginal compared to Bose, Seats are hard and small for a large person .\\n23 The seats are comfortable, and there is ample leg room in the front and rear .\\n24 Most uncomfortable seats in any vehicle I have ever owned .\\n25 Only 2 things could make it better memory seats and a smoother shifting transmission .\\n26 Seats are firm but not uncomfortable , very BMW like .\\n27 Advise anyone considering the L to drive one for awhile if you can , some cannot stand the seats .\\n28 The seat cover was coming out in between the seats .\\n29 The only for sure complaint I have is the seats seems to hurt my back after I drove for a period of time, this may be because I am use to my silverado truck with leather bucket seats .\\n30 DON'T rely on your test drive, the seats are Very uncomfortable and when the engine goes into the econo mode the vehicle shifts rocks violently forward and when leaving the econo mode it shifts rocks forward once again which means that the vehicle is CONTINUOUSLY SHAKING AND ROCKING .\\n31 Seats are very comfortable and ride is very smooth !\\n32 It's a black beauty with comfy leather seats .\\n33 The front seats are extremely uncomfortable after anything more than 15 minutes of driving due to what I see as a design flaw, the seat curvature is too great, and even with the lumbar support all the way retracted, it still feels like there is some type of bar sticking out in the wrong part of my back .\\n34 However, long, distance comfort is poor due to hard, narrow and deeply, bucketed seats combined with a very taut suspension which transmits even minor road imperfections through the whole vehicle .\\n35 At first the seats seemed stiffer than I'd like, but after making a 2 1 2 hour trip, It felt very comfortable once I got the seat and lumbar adjusted to my liking .\\n36 Great leg room in the back and the seats a very supportive .\\n37 Door closure is solid, leather seats are very comfortable .\\n38 Ride is very good, but seats are just a little firm .\\n39 Seats are not very comfortable and not happy with the heated seats .\\n40 The seats are very comfortable and I love the cloth .\\n41 Seats are little on the hard side .\\n42 The black leather seats feel a bit hot on the back in the warm weather but otherwise no complaints about the interior .\\n43 Steering nice and tight, seats a little stiff but comfortable .\\n44 We wanted three things, heated seats and mirrors and an easy to get out of back seat for some aging friends .\\n45 Ride is superior, comfortable seats, radio excellent .\\n46 5 Seats= Like sitting on a church pew .\\n47 Leather seats are the only thing of good quality .\\n48 Problems with steering wheel, windows & seals, seats .\\n49 Smooth responsive acceleration,top of the line high quality supple comfy leather seats .\\n50 Also, amazing leg space in front AND back seats , the Accord could almost be considered a full size sedan .\\n51 5L V6 scoots sporty handling and acceleration good sporty leather seats highway gas mileage appearance package worth having no dealer service yet Negatives :\\n52 First off the new body style is very appealing and the new seats are more forgiving for larger men .\\n53 The heated seats for me and my passenger are a plus for the cold weather .\\n54 hard seats, hard ride, more road noise than expected, disappointing gas mileage .\\n55 The seats are supportive and the materials are great .\\n56 You get a V, 6, heated leather seats, XM, 18 rims .\\n57 Cloth front seats big & comfortable .\\n58 Seats are stiff but once adjusted seem to become more comfortable .\\n59 The seats are very firm, but getting used to this .\\n60 The seats in my 2008 which is just like a 2009 are considerably less than I'm used to from Honda .\\n61 The only hiccup I can report is that I think that the seats in our 2008 Odyssey are a bit more comfortable .\\n62 Don't get me wrong, the Accord is a comfortable car, I am just a big guy and the seats just feel like they could use a little more of something .\\n63 I have two herniated disks and the seats of the Honda have alleviated the pain in my legs and back when I drive .\\n64 Additionally, the standard seats are not my favorite .\\n65 Although it's a lower trim level, it has high quality interior trim very comfortable seats and and very smooth, quiet ride .\\n66 Decent accel, huge back seat for my kids baby seats large friends .\\n67 we don't need moonroof, heated seats side mirrors we live in S .\\n68 With the leather seats, comfort is close to EX, L's at a best buy price .\\n69 Seats are a bit too firm for me .\\n70 Leather seats are very comfortable .\\n71 The inside and outside pads should ALWAYS wear evenly Always had stiff ride and seats .\\n72 I have a bad lower back, and the lumbar support on the seats is a life saver !\\n73 Front seats much more comfortable .\\n74 The satellite radio cuts out constantly, the heated seats are barely warm, the sound system is pathetic and the brakes wore out around 15,000 miles google it .\\n75 We are both tall, 5'11'' and 6'2 and have no problems with the seats .\\n76 After driving it for a few months I found the seats are tough on the lower back on long runs and it need a few more inches to go back .\\n77 Seats are too firm and leather is quite hard in character and feel .\\n78 I was slightly concerned about all the reviews with the seats being uncomfortable .\\n79 I love the seats, they are supportive .\",\n \" Ride seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 Seats are fine, in fact of all the smaller sedans this is the most comfortable I found for the price as I am 6', 2 and 250# .\\n1 Great gas mileage and comfortable on long trips .\\n2 Good gas mileage, comfortable seating, lots of leg room .\\n3 Lots of comfort for the price .\\n4 The ride is loud and not comfortable .\\n5 I drive 2 hours to work each day and it is just not comfortable to me .\\n6 Getting about 26 mpg mixed city hwy with conservative driving, seating 4 people comfortably .\\n7 The ride is quiet and comfortable .\\n8 Styling is bland, the engine isn't strong at all, and the car doesn't deliver good comfort while driving it .\\n9 The seats aren't comfortable either .\\n10 It is relatively comfortable inside .\\n11 It's a pretty good car, reliable, comfortable as far as it goes, but limited rear visibility because of high rear bumper, and a problem with its computer learning my driving style .\\n12 The driver seat is still soft and mostly uncomfortable .\\n13 The ride is comfortable and it seems to ride a little higher than the average sedan, which I like .\\n14 I've had 3 BMWs and only one of them could offer a more comfortable ride than the Camry .\\n15 Second the internal comfort id awful .\\n16 The previous soft seats were replaced with hard cheap ones which are very very uncomfortable and give me back pain .\\n17 If you keep in mind that the Camry is a comfort car, you may even enjoy the experience .\\n18 While the 4 cylinder does not have the punch of the Honda Accord 4 cylinder, the comfort and quietness of the ride won out .\\n19 No hestitation, comfort is great in front in back .\\n20 I feel uncomfortable driving this car and will get rid of it .\\n21 Very comfortable, great styling .\\n22 I was surprised by how quiet the cabin was and just how comfortable it was to sit in and drive .\\n23 This car offers poor driver's seat comfort, poor vision , only average ride quality, gas mileage \\n24 We have had this Camry about two years now, and it is not a boring car but it is smooth, comfortable and has good road manner, and overall it is a good car .\\n25 I'd highly recommend anyone buy this car if they are seeking an affordable, comfortable, reliable vehicle .\\n26 You can not get that comfort with any other automaker other than perhaps Honda .\\n27 Looks are great and interior is comfortable, but it ?\\n28 I needed a comfortable commuter that I could also run around with the family in .\\n29 great ride, quiet comfortable spacious cabin, superior electronics , fair price and good looks .\\n30 You can't have it both ways, either a car is full of power and stiff suspension or it's smooth and comfortable on the road .\\n31 The interior is very luxurious and comfortable, however the car feels slower than my 2002 Camry LE .\\n32 For the comfort and entertainment of the ride, I like the Camry .\\n33 The driver's seat is really comfortable .\\n34 I have had no transmission issues or rattling, the comfort and ride of this vehicle felt to me much more high end then what I had paid .\\n35 I love the look, and the comfort, but would never buy one again .\\n36 I've read other reviews stating that the leather seats were not comfortable for long drives due to lack of cushion support, but that's not been the case for me especially after recently driving from Houston to Key West, Fla .\\n37 The seats were very comfortable .\\n38 The car comfort, looks, performance and fuel economy are great but the paint is a disaster .\\n39 Front seats are not comfortable on long trip .\\n40 I was not sure at first about trading my 01 Honda Accord but have been more than satisfied with the performance, looks, and comfort .\\n41 A little stiffer ride than the xl and xle models I have had, but still comfortable and quiet .\\n42 Very comfortable ride and seating .\\n43 Very low interior noise level, which adds to the long trip comfort .\\n44 The ride, comfort, and drive is as expected, however, the quality and reputation of yore are completely gone for the flagship Camry .\\n45 Over the month it was in the shop, we rented several different cars and nothing seemed to measure up to the comfort and options of the Camry .\\n46 The seat comfort is not as it was and I found that the gas, brake pedals are offset too much to the left of my body centerline .\\n47 Very comfortable, quiet interior .\\n48 Seats are padded more firmly than previous model but comfortable on trips .\\n49 Feels expensive, yet comfortable with larger interior than my Grand Prix .\\n50 Trunk is big and rear seat very comfortable for 2 and will seat 3 .\\n51 Headroom body room comfort great for my 6'1 250 lbs .\\n52 I feel that the Camry just gets better and better in terms of comfort, styling and performance with each generation .\\n53 It looks awesome, turns like it's on rails, has a great sound system, and is just comfortable and fun to drive .\\n54 It is very quiet and comfortable .\\n55 Smooth, comfortable, reliable, fast .\\n56 Very comfortable seating position for both me and my husband .\\n57 The interior is extremely comfortable, and spacious .\\n58 For the price I couldn't have asked for a better performing, comfortable and stylish whip .\\n59 The seating is relatively comfortable .\\n60 Other than that, technology is mind blowing on this sedan and performance is incredible, with a smooth and comfortable ride .\\n61 I'm 6'3 and I find this car very comfortable to drive or ride in .\\n62 My friends say my car is just like a Lexus and I have to agree, very comfortable and beautiful .\\n63 Seats are comfortable, but wish the seat bottoms tilted back more into a bucket position .\\n64 Solid, high quality, comfortable and quiet .\\n65 Uncomfortable head restraint, too close to my head .\\n66 Superb handling, performance and comfort .\\n67 Turns out, it was one of the smoothest, most comfortable rides ever .\\n68 I bought this car smitten by its exterior look and interior comfort .\\n69 Yes, it is very comfortable, esp for the price paid .\\n70 Very quiet and comfortable ride, more than enough power .\\n71 It is very reliable and comfortable .\\n72 It's very comfortable and a quiet ride with low levels of road and wind noise .\\n73 The seats are way to low to the ground making long drives uncomfortable .\\n74 I do not find the front seats as comfortable as the seats in my old 96 Ford taurus .\\n75 Toyota made many improvements since 03, including more comfortable front seats, better rear seat room and comfort .\\n76 Very comfortable, quite and smooth ride .\\n77 The sound system is incredible, the seats are comfortable, the controls are ergonomic and straight forward and the take off power is quite impressive .\\n78 My passengers are expecially happy with it and love the room, comfort, and adjustability .\\n79 On longer trips, however, they have a tendency to fall asleep, , which I think emphasizes how comfortable, smooth, and quiet it is .\\n80 It is a very comfortable car that gives us options that we never had on previous vehicles .\\n81 I test drove and compared similar 4 door sedans like the Maxima, Accord, Mazda6, and noticed that none had all the features,performance,comfort ,safety,and looks that the Camry has .\\n82 The navigation works flawlessly, comfortable seats .\\n83 I have to say the car rode great,comfortable and gas mileage great .\\n84 I would recommend this car to anyone looking for a comfortable ride as well as good fuel economy .\\n85 The seats were very comfortable on a four and a half hour trip, and wind and road noise were minimal .\\n86 The interior is much more comfortable than my last 3 Camrys and the exterior styling is oh so chic .\\n87 Comfortable and quiet with excellent gas mileage .\\n88 Comfort is great, mileage is good overall, better on the road than expected , compared to my 1999 Camry .\\n89 Having flown 26 different aircraft and driven cars for 61 years, I find the 2007 Camry to be the most uncomfortable cockpit I have every been in .\\n90 The headrest presses into my head at an uncomfortable angle and it is imposssible to tell where the front of the car is for parking .\\n91 The window sill is too high and the armrest too low to be comfortable .\\n92 The new looks are what attracted it to me initially, but its relatively smooth drive, comfort and reliability sold me on it .\\n93 It is a beautiful sapphire blue, has really nice lines, is very comfortable, is plenty peppy, and hugs the road .\\n94 The ride is very comfortable, although I'm 6'6 and I didn't think head room was an issue but I do think leg room could be better, I think this is mainly because the back seats have tons of leg room .\\n95 It is so comfortable and drives perfect .\\n96 Overall this car is very quiet, comfortable, smooth, powerful, and absolutly the best mid, size in the current market .\\n97 Leather seats are comfortable, Nav system is easy to use .\\n98 I only have a vibration shimmy problem at 70 mph, visited dealer three times and ended up with changing a new tire and now the ride is even quieter and comfortable .\\n99 Leather seats were comfortable .\\n100 Leather interior very comfortable .\\n101 My conclusion after doing a ton of research regarding safety, reliability, comfort and gas mileage :\\n102 the Hyundai Sonata is thousands of dollars cheaper and matches the Camry in all respects except comfort .\\n103 Bottom line was that I was going to be in that driver's seat for years to come and I was not going to skimp on the critical comfort factor .\\n104 While the '03 was roomy and comfortable, the steering and handling were very vague .\\n105 The interior is upgraded markedly, and although there is a bit less headroom, the added telescoping feature of the steering wheel combined with the greater travel of the seat yields greater comfort .\\n106 , a luxurious comfort feature, and a fuel consumption that is best in the class .\\n107 Nice looking interior but seats are very hard and are not comfortable for long trips .\\n108 Top notch rating on interior comfort .\\n109 The car is VERY comfortable and the air conditioning is perfect for the heat here in Arizona .\\n110 Extremely comfortable with 3 separate power driver seat adjustments .\\n111 I purchased a Camry LE approximately 2 months ago, it's a smooth comfortable ride .\\n112 I selected the Camry for its comfort and reliability .\\n113 This new Camry is indeed very comfortable with quiet and soft ride .\\n114 Very uncomfortable when driving long distances .\\n115 I am not real fond of the electric seat and I find it is not as comfortable as my F150 pickup on trips .\\n116 This car is easy to drive, great gas mileage and comfortable .\\n117 However, when we drove the Camry we were impressed with its looks and the comfort of the ride .\",\n \" It's quiet, get good gas mileage and looks clean inside and out .\\n0 The mileage is great, and I've had to get used to stopping less for gas .\\n1 Thought gas mileage would be better .\\n2 There are trade offs that I have no problems with, my mileage after two tanks with mostly city driving is 21 but acceleration is very good, smooth, ride a little firm but enjoy the handling .\\n3 I chose it for the low emissions, value for the money, reliability and gas mileage .\\n4 The EPA mileage ratings and what the dealer bragged about mileage wise are a joke .\\n5 6, 4, 3 eco engine has poor performance and gas mileage of 22 highway .\\n6 road noise is horrible, stereo sucks, terrible gas mileage etc .\\n7 Otherwise the gas mileage, service intervals, drive and dependability is still pristine .\\n8 I traded an 05 Acura TL for the gas mileage savings .\\n9 Runs better than AUDI A6 , Better Mileage \\n10 Gas mileage at first wasn't great but having reached 2500 miles, it seemed to go up dramatically in city driving .\\n11 Leased in Feb 2008 as a replacement to a Pilot, which had poor gas mileage .\\n12 I do miss the carry and load capacity of the Pilot, but the Accord gets decent gas mileage by comparison .\\n13 My old Buicks had far smoother shifts at far higher mileage .\\n14 It has excellent gas mileage drove from PHX to San on a half a gas of tank .\\n15 gas mileage sucks, i was getting 20 mpg on 05 accord v6 and seem to pull only 18 mpg on this one .\\n16 Gas mileage is only 20 around town and 26 to 27 on the highway with a four !\\n17 The car has met expectations, aside from the gas mileage and wind noise .\\n18 Almost half the mileage as compared to advertisement .\\n19 At first the Gas mileage was very poor but has really improved .\\n20 I wanted an inexpensive car with good mileage, and strong resale .\\n21 Very good mileage, getting about 28 mpg combined highway, and I have a heavy foot .\\n22 The 190 hp I4 engine is powerful and smooth enough to enjoy, without sacrificing fuel mileage .\\n23 great mileage, poor build quality of the car .\\n24 On top of all this, I get horrible gas mileage in city driving I get 15, 16 mpg .\\n25 It gets great gas mileage and love the car .\\n26 Mileage over three tanks has been 25 .\\n27 3 mpg as consistent full tank highway mileage .\\n28 The car drives great and gets better gas mileage than my 2000 Lincoln LS V8 .\\n29 It looks great, handles well, and gets good gas mileage .\\n30 The gas mileage has improved from 18MPG to 21 but that still is not good .\\n31 Gas mileage has been a bit disappointing, but it has been improving .\\n32 the variable cylinder management changes to 4 cyl when not under load, this helps with fuel mileage .\\n33 After owning a Honda Accord EX I had to go back to the Honda the gas mileage can't be beat .\\n34 Gas mileage is around 22, 23 in town and 29, 30 on the highway .\\n35 Fuel mileage has been less than expected .\\n36 It's no 8 cylinder GT, but it also gets double the gas mileage and so far, no problems .\\n37 Aside from missing the turbo's acceleration, I've preferred the Accord's better mileage, handling and comfort .\\n38 The manual transmission lets me control the car better and achieve higher mileage .\\n39 So beware, if you are trading in your V8 for a mileage vehicle, this is not it in my case .\\n40 The car is getting great gas mileage even though I have only been driving it 2 weeks .\\n41 Our 2008 Accord is very disappointing, our in town mileage is 14 .\\n42 Gets great gas mileage, I mostly drive city and I am currently receiving 25 .\\n43 I just love the VCM makes the car give great mileage .\\n44 Initial gas mileage looks good too .\\n45 Don't buy this car if you want good gas mileage .\\n46 I have a V, 6 with Variable Cylinder Management which is supposed to let the car run on 3,4 or 6 cylinders, as needed, to improve mileage .\\n47 My BMW 530i got better mileage .\\n48 It is fun to drive, I love the color, it has great features, the sound system is nice, the power is perfect and the gas mileage is great !\\n49 Fun to drive, fairly roomy, looks good, gas mileage is OK , but not as good as Honda advertises .\\n50 Gas mileage is wonderful, 1st tank 26 mpg with almost all city driving .\\n51 I had tons of room in my 4Runner, but I needed something that would get better gas mileage w o giving up power .\\n52 I am so very disappointed with the gas mileage !\\n53 I traded for better mileage, and this is what I got .\\n54 I will warn you though, that if you drive it like it should be driven, gas mileage isn't the best .\\n55 It feels safe, performs well, looks fantastic and gets decent gas mileage for its size .\\n56 The Accord is better than other those car on gas mileage and reliability .\\n57 Strangely, the gas mileage is not as good as the Acura but is acceptable .\\n58 Some reviewers were complaining about gas mileage .\\n59 Gas mileage is horrible too, 20 mpg city highway after 6000 miles .\\n60 If you are looking for a car that is affordable and well built this is the car for you bad gas mileage\\n61 In reality we have been very disappointed our in city mileage is 16, 17 and highway is better at 27 .\\n62 While the mileage is not bad it good be better, but as the acceleration is good for a 4 cylinder it's a trade, off .\\n63 I am sure as gas prices go up cars will be built to get better mileage at the expense of acceleration .\\n64 Good looking inside and out, comfortable and roomy, commendable performance, and excellent gas mileage .\\n65 I live in Chicago and drive downtown and back 2 times a week for school and am getting great mileage .\\n66 Only update is after about 5k miles the fuel mileage is less than I had anticipated .\\n67 Everything else such gas mileage, handling, stereo system is fine but it doesn't make up for the loud rattles and wind noise .\\n68 It's almost embarrassing driving such a nice car around a parking lot and have it sound like a high mileage beater .\\n69 So I saved $2 K upfront and will also save down the road since the 4 cylinder gets slightly better gas mileage .\\n70 It is a well built car that runs smooth and gets great gas mileage .\\n71 Gas mileage is still getting better though .\\n72 The gas mileage on the highway is about the same for both models .\\n73 Local mileage with the '08 has been about 24 mpg, and about 25 mpg with the '06's that we've leased .\\n74 I decided to go back to Honda as even with high mileage they keep their value .\\n75 Mileage , also not impressive , all I can get is about 24mpg, far from the 32 mpg you see on the window sticker .\\n76 Posted mileage ratings are for those who have a heavy right foot .\\n77 Gas mileage is fantastic especially going from a V8 SUV to a 4 cylinder sedan .\\n78 I was tempted to go for the V6, but I drive 42 miles one way to work and we have an '07 Odyssey with the variable cylinder management system and unless you're on long highway runs it doesn't get the gas mileage Honda claims .\\n79 I just love this car , and with almost double the highway gas mileage that I was getting with my Grand Cherokee , that adds a lot of $$ towards my monthly payment .\\n80 190 hp and superior gas mileage .\\n81 It wasn't worth saving the little difference in gas mileage for this Honda .\\n82 The gas mileage is about 45 to the gallon going on the highway with cruise at about 800 or 900 RPM and about 38 going 70 .\\n83 The Gas mileage is good, the acceleration sometime is slow when cold from 1st to 2nd gear .\\n84 I hope to get better mileage on extended highway trips .\\n85 I think the mileage would be even better with a 6, speed stick shift to drop the tachometer from ~2300 rpm to <2000 rpm at 60 mph .\\n86 Gas mileage has been improving and is now consistently 29 hwy 22 city .\\n87 Very peppy engine great fuel mileage 28, 30 combined .\\n88 I am not known to drive slowly so I am pleased with the mileage .\\n89 We bought this car with the expectations of getting a car that feels good with my bad back, gets good gas mileage, and is reliable .\\n90 So far, the reliability has been as expected, it is comfortable on my back, and the gas mileage has been pretty good .\\n91 It is great to drive, has many nice features and gets you there with great mileage .\\n92 Mileage is very good and we have already taken it on a long trip .\\n93 I had rather not have it and sacrifice the mileage .\\n94 The gas mileage has been as advertised, hitting 32 mpg on the highway when driving at 65 MPH .\\n95 Gas mileage after 1000 miles is averaging apprx 23, 24 mpg in a blend of city highway .\\n96 It has everything but good gas mileage .\\n97 This car has great gas mileage even with the V6 .\\n98 The best gas mileage I can get is 22 mpg which is mostly highway and the car sometimes hesitates during acceleration\\n99 I drive around 60 miles a day so fuel mileage was important .\\n100 First tank mileage was 27 mpg not bad at all .\\n101 highway mileage slightly over 30 as advertised .\\n102 with gas prices, wanted better mileage .\\n103 It gets good mileage on HWY = 30 but mediocre on local = 21 .\\n104 SUV, wanted something with better gas mileage and something that had good resale value .\\n105 The 4, door provides the room we needed, the exterior design keeps the sedan from looking boring, the gas mileage is great, the price point was right, and the reliability is terrific .\\n106 Gas mileage is disappointed, avg 20 mpg so far .\\n107 i just purchased my lx, p a couple of weeks ago, having driven a pick up for the last 25 years, i was really surprised at how much i like this car, going from a big v, 8 to a 4 is a change but the power is good, gas mileage is great .\\n108 At first the gas mileage was a disappointment, but as the car is now breaking in it's getting better .\\n109 I test the car and was very impressed with the looks and the 4cyl was adequate since gas mileage was very important to me .\\n110 I expected a little better gas mileage avg, approx 26 mpg .\\n111 poor gas mileage look close at your window sticker not the big mpg numbers but the ratings below, it tells you that you could get 17 mpg based on your driving habits .\\n112 The ride is excellent, and the fuel mileage is impressive so far .\\n113 Wanted something with better handling and gas mileage .\\n114 Great gas mileage for a v, 6 .\\n115 Gas mileage is horrible on highway at 21 mpg .\\n116 My mileage, is averaging about 28 .\\n117 I was a bit disappointed with the 4 Cyl mileage as I drive over a 100 miles a day round trip to work .\\n118 There seems to be no way to shut it off and mileage is about 26 27 highway .\\n119 Mileage jumps on the highway to 31 32 at normal speeds .\\n120 The car is very smooth for a v4, my first, but I thought that the gas mileage should be More about 38, 45 .\\n121 Around town gas mileage is not as good at 22 with a mix of city and high way .\\n122 Mileage looks like it will be a little less than the older V6 Hondas\\n123 Some here have complained of poor gas mileage, but I've had mine almost two weeks, driven 300 miles so far in mostly city driving, and have a bit more than a quarter of a tank left .\\n124 5L V6 scoots sporty handling and acceleration good sporty leather seats highway gas mileage appearance package worth having no dealer service yet Negatives :\\n125 Tough negotiations w 6 Wash DC dealers city gas mileage road noise no keyless memory link w driver profiles steering wheel quality and size console storage tray outside mirrors don ?\\n126 VCM works out nice for better mileage .\\n127 hard seats, hard ride, more road noise than expected, disappointing gas mileage .\\n128 And great gas mileage averaging 28 .\\n129 Very disappointed in mileage .\\n130 Nowhere near the mileage the sticker shows .\\n131 I love the appearance of the car from the outside, and it has a much bigger feel to it, ride is a little stiff but smooth, engine is very responsive, however gas mileage is diappointing getting 5 mpg less then 06 Accord .\\n132 My only really complaint is the gas mileage is not as good as advertised .\\n133 Mileage is decent around 24, 27 .\\n134 Traded in my Oddysey for better gas mileage and more comfort .\\n135 So far not super impressed with gas mileage, and comfort, well lets just say my dealership just ordered a new seat cushion for me today .\\n136 Gas mileage will surely improve, hopefully .\\n137 The trade, off is a bit lower mileage but still better than most out there .\\n138 Having had to give up my 99 Accord due to very high mileage 170K\\n139 My my, I have never experienced such smooth performance, stability, pick, up, mileage and comfort that I am enjoying with my new 2008 Honda Accord .\\n140 Mileage so far is the big disappointment, low 20's, old Accord was never below 27mpg .\\n141 Telling me how good the gas mileage is not true .\\n142 5 in nob the display under the speedometer could be more helpful telling me how many miles gallon I have, telling me how my speed affects my gas mileage .\\n143 Gas mileage is great for a vehicle with this type of performance .\\n144 The car has ample power, but the gas mileage has been disappointing .\\n145 The car is as big and roomy inside as my old Acura Rl, handles better and gets better gas mileage .\\n146 It's fun to drive, and gets great gas mileage .\\n147 The best gas mileage I have achieved for this 4 cyl .\\n148 Handles great, good mileage, and wonderful ride .\\n149 The Accord was quiet, was easy to drive, seemed to be the right size, and would provide decent mileage .\\n150 It was the combination I was looking for, great look, good value, decent gas mileage, and Honda's resale value .\\n151 The windshield wash barely hits the windshield but I am mostly disappointed in the gas mileage .\\n152 I do not know what these people are talking about saying it gets bad gas mileage !\\n153 Car rides great, good fuel mileage .\\n154 Gas mileage is not as advertised , 25 mpg at most .\\n155 Gas mileage is OK, averaging about 23, 24 city , 31 highway normal driving, I don't drive fast, but I don't drive slow either .\\n156 Fuel mileage is disappointing 15 18 city 22 26 hwy .\\n157 Gas mileage not quite as good as advertised .\\n158 Gas mileage is above average .\\n159 Great power, great ride, and pretty good fuel mileage .\\n160 Gas mileage is at it's highest 24 mpg usually 22 mpg hwy .\\n161 The VCM definitely helps the mileage , it was very noticeable when it activated in the beginning, but is barely detectable now, except for the dash indicator .\\n162 Little 4cyl 5 spd LX and it got awesome gas mileage .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cluster_label\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 1,\n \"samples\": [\n 1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 14 + } + ], + "source": [ + "document_df[document_df['cluster_label']==1].sort_values(by='filename')" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "ca3a22af-3aea-4fdc-98fc-0320ea6d7247", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "ca3a22af-3aea-4fdc-98fc-0320ea6d7247", + "outputId": "9758de5a-aff7-498a-98a8-95d80df17f4e" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "34 /content/drive/MyDrive/topics/buttons_amazon_kindle \n", + "28 /content/drive/MyDrive/topics/eyesight-issues_amazon_kindle \n", + "21 /content/drive/MyDrive/topics/fonts_amazon_kindle \n", + "17 /content/drive/MyDrive/topics/keyboard_netbook_1005ha \n", + "32 /content/drive/MyDrive/topics/navigation_amazon_kindle \n", + "6 /content/drive/MyDrive/topics/screen_ipod_nano_8gb \n", + "5 /content/drive/MyDrive/topics/screen_netbook_1005ha \n", + "9 /content/drive/MyDrive/topics/size_asus_netbook_1005ha \n", + "\n", + " opinion_text \\\n", + "34 I thought it would be fitting to christen my Kindle with the Stephen King novella UR, so went to the Amazon site on my computer and clicked on the button to buy it .\\n0 As soon as I'd clicked the button to confirm my order it appeared on my Kindle almost immediately !\\n1 ... \n", + "28 It feels as easy to read as the K1 but doesn't seem any crisper to my eyes .\\n0 the white is really GREY, and to avoid considerable eye, strain I had to refresh pages every other page .\\n1 The dream has always been a portable electronic device that could hold a ton of reading material, automate subscriptions and fa... \n", + "21 Being able to change the font sizes is awesome !\\n0 For whatever reason, Amazon decided to make the Font on the Home Screen ... \n", + "17 , I think the new keyboard rivals the great hp mini keyboards .\\n0 Since the battery life difference is minimum, the only reason to upgrade would be to get the better keyboard .\\n1 The keyboard is now as good as t... \n", + "32 In fact, the entire navigation structure has been completely revised , I'm still getting used to it but it's a huge step forward .\\n0 ... \n", + "6 As always, the video screen is sharp and bright .\\n0 2, inch screen and a glossy, polished aluminum finish that one CNET editor described as looking like a Christmas tree ornament .\\n1 ... \n", + "5 Keep in mind that once you get in a room full of light or step outdoors screen reflections could become annoying .\\n0 I've used mine outsi... \n", + "9 A few other things I'd like to point out is that you must push the micro, sized right angle end of the ac adapter until it snaps in place or the battery may not charge .\\n0 The full size right shift k... \n", + "\n", + " cluster_label \n", + "34 2 \n", + "28 2 \n", + "21 2 \n", + "17 2 \n", + "32 2 \n", + "6 2 \n", + "5 2 \n", + "9 2 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
filenameopinion_textcluster_label
34/content/drive/MyDrive/topics/buttons_amazon_kindleI thought it would be fitting to christen my Kindle with the Stephen King novella UR, so went to the Amazon site on my computer and clicked on the button to buy it .\\n0 As soon as I'd clicked the button to confirm my order it appeared on my Kindle almost immediately !\\n1 ...2
28/content/drive/MyDrive/topics/eyesight-issues_amazon_kindleIt feels as easy to read as the K1 but doesn't seem any crisper to my eyes .\\n0 the white is really GREY, and to avoid considerable eye, strain I had to refresh pages every other page .\\n1 The dream has always been a portable electronic device that could hold a ton of reading material, automate subscriptions and fa...2
21/content/drive/MyDrive/topics/fonts_amazon_kindleBeing able to change the font sizes is awesome !\\n0 For whatever reason, Amazon decided to make the Font on the Home Screen ...2
17/content/drive/MyDrive/topics/keyboard_netbook_1005ha, I think the new keyboard rivals the great hp mini keyboards .\\n0 Since the battery life difference is minimum, the only reason to upgrade would be to get the better keyboard .\\n1 The keyboard is now as good as t...2
32/content/drive/MyDrive/topics/navigation_amazon_kindleIn fact, the entire navigation structure has been completely revised , I'm still getting used to it but it's a huge step forward .\\n0 ...2
6/content/drive/MyDrive/topics/screen_ipod_nano_8gbAs always, the video screen is sharp and bright .\\n0 2, inch screen and a glossy, polished aluminum finish that one CNET editor described as looking like a Christmas tree ornament .\\n1 ...2
5/content/drive/MyDrive/topics/screen_netbook_1005haKeep in mind that once you get in a room full of light or step outdoors screen reflections could become annoying .\\n0 I've used mine outsi...2
9/content/drive/MyDrive/topics/size_asus_netbook_1005haA few other things I'd like to point out is that you must push the micro, sized right angle end of the ac adapter until it snaps in place or the battery may not charge .\\n0 The full size right shift k...2
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"document_df[document_df['cluster_label']==2]\",\n \"rows\": 8,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 8,\n \"samples\": [\n \"/content/drive/MyDrive/topics/eyesight-issues_amazon_kindle\",\n \"/content/drive/MyDrive/topics/screen_ipod_nano_8gb\",\n \"/content/drive/MyDrive/topics/buttons_amazon_kindle\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 8,\n \"samples\": [\n \" It feels as easy to read as the K1 but doesn't seem any crisper to my eyes .\\n0 the white is really GREY, and to avoid considerable eye, strain I had to refresh pages every other page .\\n1 The dream has always been a portable electronic device that could hold a ton of reading material, automate subscriptions and facilitate quick easy downloads, and be as portable, as easy on the eyes, and as intuitive as a book .\\n2 they would ask, to which I would squint my eyes and reply, Huh ?\\n3 I found that the Kindle 2 is immediately appealing to the eye and once described in the barest of terms people want one for themselves .\\n4 No having to turn away every few minutes to relax your eyes or ending a session of reading with a headache .\\n5 , E, ink and matte screen , No harsh computer, screen look to it does not fatigue my eyes at all, and the matte helps reduce glare from light bulbs and the sun .\\n6 My eyesight is fine, but I can choose the font size that suits me best .\\n7 'Easy, on, the, eyes' reading with adjustable fonts and 16 shades of gray capability using digital ink :\\n8 I noticed this almost immediately but thought it was due to my poor eyesight .\\n9 I can read technical books without any problems but I cannot read text on the Kindle without straining my eyes .\\n10 I was starry eyed in anticipation of the newest addition to our family .\\n11 The text clarity and screen sharpness of K2 is severely disappointing and produces eye fatigue .\\n12 I had old favorites, and some classics that we're told we should read, samples that had caught my eye, and lots of new choices , , and I held them all in my hand .\\n13 I know I need to go to the optometrist, but the Kindle will aide and abet me in avoiding that for a while , , the page is easy to read, the font size is easy to change, and my eyes sail across the words, my finger hits next page without me giving it thought .\\n14 And with the Kindle, I can adjust the font to any of six different sizes, which is of some importance to those with poor vision or tired eyes .\\n15 The text is easy on my eyes .\\n16 For me, it was no problem at all, no eye strain after reading for a few hours .\\n17 I know some people are really upset about the no backlight issue, but I'm glad because it is not as straining on my eyes as a computer screen .\\n18 I read for 2 hours in the middle of the night last night and my husband never knew, and my eyes didn't hurt .\\n19 Text to speech is adequate, I don't see myself using this feature too much, but it's a lot better than nothing when you need both hands free, and it would be a truly fantastic feature for anyone with poor eyesight or blindness .\\n20 , The screen is easy on the eyes .\\n21 The screen is amazing & the one thing that kept me from reading on into the night constantly eyestrain is NO LONGER a CONCERN !\\n22 I don't care it doesn't have a backlight , if I wanted that I'd read from my laptop and kill my eyes more .\\n23 This thing is so easy on the eyes, I like it better than an actual book .\\n24 0 out of 5 stars A great tool for those of us with aging eyes, February 28, 2009\\n25 The text, bumped up two magnification levels, is sharp and clear enough for me to make out, and while I've seen some criticism of the gray page background, I actually find it easier on my eyes than stark white .\\n26 For those of us in the Boomer bulge whose eyesight is failing and taking with it the pleasure of reading , and for those with other forms of visual impairment , it's nothing less than a miracle .\\n27 As advertised, it is very easy on the eyes, combined with font sizing and easy navigation this does what it was meant to do .\\n28 I am loving the whole concept and read almost a whole book last night with no eye strain at all .\\n29 I have been keeping an eye on the Kindle since the first was brought out and did a lot of research on this product .\\n30 and that is why it's easy on the eyes and uses very little power .\\n31 I use that as well when it gets late and my eyes tire .\\n32 The lights are casted from the side of the reader fusing towards the center, which caused me to experience severe eye, strain .\\n33 Even without the back light, within fifteen minutes of reading on the sony reader due to the glare, my eyes were hurting .\\n34 I have not experienced eye, strain .\\n35 The illuminence of the light is equally distributed onto the screen which causes no eye strain .\\n36 Using the smaller font sizes causes eye strain except in daylight conditions with open windows .\\n37 And reading on the Kindle screen really is pleasant and natural, not to mention that my 47 year old eyes love the possibility of adjusting the text size !\\n38 First of all, the Kindle 2 is very easy on the eyes .\\n39 Some have said they don't like the black text on a greyish background, but I find the contrast not only more than adequate but easier on the eyes than if the background were white .\\n40 A backlighted display is not easy on the eyes for hours on end and the Kindle 2 display is as nice to read as any traditional book .\\n41 I won't be using the feature much anyway because I get a lot more out of a book I'm reading with my eyes and hearing the voice of the storyteller in my mind .\\n42 It's easier on the eyes not to have that light .\\n43 It's also easy to make the font larger whenever necessary, like when my eyes are tired .\\n44 E, ink hardly strains your eyes .\\n45 Truly, this helps in my eyes .\\n46 Easy on the eyes, font size can be changed and the book will even read to you if you want it too !\\n47 Not having your eyeballs scorched, seared and scarred by the traditional computer screen is really nice .\\n48 With the great technology of electronic ink, there isn't any back, lighting pounding relentlessly like the desert sun on your tender eyes .\\n49 This means you can read for longer periods of time without eyestrain .\\n50 The screen is so easy on the eyes .\\n51 The Kindle does not have a screen that taxes the eyes, and allows me to shift some of my time away from the computer for blogs that I would normally read online .\\n52 It's lightweight and allows changes in font size that enables ease of reading no matter how tired your eyes may get .\\n53 I do think the e, ink e, paper is a lot easier on my eyes for reading than the glossy or matte computer screens .\\n54 The screen size is close enough to the size of a paperback book page that it hasn't caused my eyes any problems .\\n55 It looks very much like a book and is easy on the eyes .\\n56 8 E, Ink display is easy to read and doesn't strain your eyes and reads better than a printed page .\\n57 I can strain to read the text but then close my eye for awhile and listen .\\n58 , Eye strain is completely non, existant in my experience .\\n59 I would like to read on the way but my eyes get strained if I read on a bus .\\n60 It is also very easy on the eyes .\\n61 I can make the font the perfect size for my eyes .\\n62 Although I'm turning pages quicker, my eyes are much less tired by using a bigger font .\\n63 The screen is less obtrusive than the white of a book page, which also helps my eyes from growing tired too quickly .\\n64 I finally got the Kindle, and my worries about the screen tiring my eyes while reading rapidly dissipated .\\n65 It's easy on the eyes and easy to hold .\\n66 I am 71 years old and read at least one or two books per week and this reader is easy on the eyes .\\n67 Searching for books and downloading them is fast and easy, the screen is very easy on the eyes .\\n68 Unfortunately my wife lost about 50 percent of her eyesight ten years ago and has not been able to enjoy reading since then .\\n69 Adding one for free to the Kindle2 is just pulling wool over your eyes .\\n70 As it gets lateI simply pump up the character size which eases tired eyes .\\n71 Now with the Kindle 2, I can change the print to suit my eyes and further, I can make more intelligent choices of books because I have more information of what is available at my finger tips .\\n72 I am amazed at how easy the E Ink is on the eyes, the slight shadowing from page to page does not bother me .\\n73 The screen is easy on the eyes, easy to learn, easy to turn pages, and the device is more comfortable than a real book or trying to hold the iphone .\\n74 The print is easy on the eye and the light weight of the device and easy to use controls make reading even more of a joy !\\n75 The Text, to, Speech function is great for times when my hands and eyes busy with other tasks .\\n76 I have an eye issue and noticed it was getting harder to read books .\\n77 I enjoy having the text at the largest size because there is less eyestrain .\\n78 The e ink is so comfortable on the eyes .\",\n \" As always, the video screen is sharp and bright .\\n0 2, inch screen and a glossy, polished aluminum finish that one CNET editor described as looking like a Christmas tree ornament .\\n1 Still, video fans should consider stepping up to a product with a larger screen, such as the Zune HD or iPod Touch .\\n2 2, inch screen can now display up to 12 lines of menu text and the Now Playing screen lists artist, album, and title information in three bolder, more readable lines at the top of the screen .\\n3 Apple's iconic Click Wheel navigation can still be found on the front of the device, just below the curved glass screen .\\n4 It looks great, is easy to handle, the screen is a good size and nice and clear, and the controls are very sensitive to the touch .\\n5 And the 5th generation has a larger screen size than the previous models .\\n6 I've owned all the iPod Nanos at one point and I can honestly say that I love the screen as it's good for causal viewing of a movie or show .\\n7 However, it doesn't have the touch screen capability .\\n8 It's really amazing just how big the screen is on such an incredibly thin device .\\n9 The picture on the small screen is surprisingly clear and easy to view .\\n10 5G lies a more mature iPod, many steps wiser and more able than its one, year, old The iPod gains many incremental improvements, including a brighter screen and better video battery life, but probably the most appealing aspect is the tantalizing price points of $249 for the 30GB version and $349 for the huge 80GB version .\\n11 New features like lager screen and radio is a major plus .\\n12 The screen and built in speaker .\\n13 The screen is easy to read and the built in speaker works well .\\n14 The larger screen is a great plus .\\n15 Don't waste your money on those 200 dollar itouches or the new version of the Zune that is touchscreen and isn't even as good as the 5th Generation Nano !\\n16 video, motion sensing, screen size and sllek look I recently upgraded from the 2nd generation Nano and love the new features of the newest model .\\n17 Easy to use This new iPod is easy to use, has great features like a radio, and a nice screen .\\n18 Good features, small and light weight but a big screen .\\n19 The video camera is great and the screen size is a nice size\\n20 does do much in a very tiny space, bigger screen, , more features than previous models .\\n21 there are alot of new features in this model and a much larger screen .\\n22 Screen scratches easily Wanted an IPOD to listen to in the car .\\n23 has bigger screen, video camera .\\n24 what i also like is that it has a bigger screen than the regular ipod nano .\\n25 I found a lovely cheapo case with screen protection on amazon, and I think the gift worked out great .\\n26 the screen is bigger so i can watch movies .\\n27 i love the camra, and the larger screen, and the radio .\\n28 good screen quality Bought as a bday gift and they love it .\\n29 i couldnt think of a single thing this ipod is reallly great you can shoot videos listen to the radio plus you have 16 gigs of memory it is aweosme i really love it because its still as small as the last one only with a bigger screen and great color\\n30 slim, size, vedio camera, screen clarity, photo playing mode .\\n31 What's more, even if I cut a long essay into chips with 5k binary limit for each one, some of them may still be unreadable through the note reader since the wheel just simply doesn't work out to scroll the screen down .\\n32 Price, Size, Screen, FM Radio, Camera, Capacity, Scroll Wheel, Pedometer .\\n33 The battery is great and the screen as well .\\n34 The larger screen is a plus for sure .\\n35 Screen resolution is awesome .\\n36 Lack of a belt clip accessory that also protects the screen .\\n37 The only negative thing I would say is that I cannot find a sleeve coverwith a belt clip like I had for my 2nd gen, it was neoprene and protected the screen and thumb wheel .\\n38 Easy to use video camera, Big screen, Fun color .\\n39 Also the screen I love how big it and, how easy you can read the playlist The color rocks !\\n40 Screen does not scratch, but can get fingerprints easily .\\n41 Very easy to use, love the pedometer, lightweight, thin, nice screen, great sound, battery lasts much longer than stated .\\n42 but I'm really disappointed they didn't keep the same finish as last year's matte finish, last year's model never got fingerprints, except on the screen itself, and looked new at all times .\\n43 Nice size screen, good speakers for size, great new features, tons of colors to choose from, easy to use .\\n44 Video is impressive, speaker sound is good for size, easy menus, screen is big enough to watch movies .\\n45 Watched one last night in bed while mrs was sleeping and screen is big enough .\\n46 The old Nano stuff fits but no openings for camera lens & this screen a bit larger .\\n47 New Features, Bigger Screen .\\n48 Now all it needs is a camera that can take still pics, maybe a bigger screen, a built in antenna, and internet Buy it if you're looking for a good iPod !\\n49 Small size and Color, Gettin your Money's worth, nice screen, and video camera .\\n50 Same as last model with some differences in screen size a 2 .\\n51 The mic and camera are great, speaker is great for video playback or bedtime movie watching, the screen is now even bigger and the device is the same size but Lighter than the 4th gen nano !\\n52 If these get much smaller, though, I won't be able to read the screen .\\n53 It's small and lightweight, it looks amazing, the video quality is way better than I ever imagined it would be, and the screen is huge .\\n54 I like the fm radio, have an audio book and even downloaded a movie on it, , small screen but is watchable .\\n55 I bought the nano as a replacement for an older classic, which was a great unit but time has taken it's toll on the battery and screen .\\n56 This is a vast improvement on the last Nano, with a bigger screen and more capacity .\",\n \" I thought it would be fitting to christen my Kindle with the Stephen King novella UR, so went to the Amazon site on my computer and clicked on the button to buy it .\\n0 As soon as I'd clicked the button to confirm my order it appeared on my Kindle almost immediately !\\n1 After reading through the introductory guide that loads up automatically at the start and following along it took me almost no time to learn which buttons are where and what each of them do .\\n2 I started reading with the default size without my glasses and noticed I was squinting a bit, so changed to one size larger with a couple button clicks and it was much easier without feeling like the print was too big and took up too much of the page .\\n3 The gadget feeling is underlined by needing to press a button to turn pages .\\n4 It took very little time to get used to having to push a button to turn pages and the screen flash as they turn only really startled me the first few times .\\n5 I don't feel the need to push the button ahead of time to prepare for the end of the page at all, which evidently a lot of Kindle 1 owners do since it's a bit more sluggish .\\n6 unintended page changes, the awkward way I sometimes have to hold it to keep from hitting buttons, the sometimes slow page refresh, and the screen freezes that now has me traveling with a paper clip lest I need to do a reset while commuting on the train .\\n7 No longer do I have to press and hold two buttons to put the device to sleep .\\n8 the button hinges are on the outside , at the edge , of the K2 .\\n9 You need to press on the interior of the button to get it to click .\\n10 Combine that with the smaller button sizes and one major source of frustration has been instantly eliminated !\\n11 The little power button at the top of the Kindle is really a power slide .\\n12 The change in the hinging and size of the buttons is major plus and would make it hard to go back to the K1 .\\n13 sleeker look and feel , sharper screen, no longer accidentally depressing the next page button by accident and having to find your place in the book again .\\n14 , The 5, way button, though a bit small, allows you to select left and right, and not just up and down like the original version .\\n15 Only issue is I need to recalibrate now, , in general, I try to anticipate how much time it will take the next page to load, and when I'm two lines from the bottom, I would hit the next page button .\\n16 Now I need to push the button later .\\n17 That 5, way button is magical .\\n18 The main issue I had with Kindle 1 was the navigation button design and placement .\\n19 I like to read holding the Kindle with one hand and it just didn't work well because I kept bumping the next, previous and back buttons .\\n20 The display is better and the 5, way button is a major improvement .\\n21 On off buttons are repositioned to be easily accessible .\\n22 Things like the buttons that made it easy to accidentally turn pages the separate cursor on the side that could only select lines and was sometimes hard to see the occasionally awkward menus the case which practically forced you to remove it to use it and sometimes pulled the battery door off .\\n23 The second thing is the buttons .\\n24 This means that when you handle the Kindle 2 by the edges, the pages don't change even if you grab by the buttons .\\n25 Yet changing pages is effortless when you do , the buttons are right between your thumbs and the slightest pressure on their faces is enough to activate them .\\n26 That it doesn't have the quirky, clunky, annoying buttons that filled \\u00be of each side of its predecessor, buttons that caused dozens upon dozens of accidental page turns makes it that much sexier .\\n27 What I like most about the Kindle 2 is the placement of the buttons and their inversion .\\n28 It has the feel of the mouse button in the middle of a laptop keyboard and I never liked those .\\n29 Manipulating that button reminded me of something I'd rather not think about when trying to get work done .\\n30 if you don't upgrade, you will regret it every time you accidentally hit one of the obscenely large buttons and advance or retreat one, two, three, or even four pages .\\n31 The page turn buttons are better .\\n32 With the Kindle 1, I was constantly at risk of accidentally bumping the next page buttons .\\n33 With the Kindle 2, the buttons have been scaled down to a much more manageable size and are a lot less sensitive .\\n34 I love the 4, way directional button .\\n35 It took a little getting used to after having used the Kindle 1, especially since the context menus that I was used to in the first gen have changed due to the new directional button, but for any Kindle user, this change is a god send .\\n36 It looks good, feels good in the hand, has good buttons, which are easy to operate on purpose but not so easy accidentally .\\n37 A button click brings up the dictionary, starting with that entry .\\n38 It's very easy to page forward or backward through the text with the dedicated buttons .\\n39 The button layout looks odd because it's so regularly spaced in rows versus the keyboard's staggered style, but it isn't any harder to use than a cellphone's tri, letter entry or blackberry keyboard .\\n40 The buttons are not hard to press at all .\\n41 Every K2 button has a satisfying \\n42 Just like how I prefer to grasp the page a few sentences before the end of a page, I tend to press the Next Page button a bit sooner than I finish reading the page .\\n43 The lag actually helps in that respect, and even so, the lag between pushing the button and the new page appearing is much faster than I could ever physically flip any book page without shearing it from the spine .\\n44 , Inside, edge buttons , These have saved me from accidentally pressing buttons many times .\\n45 The text is darker and clearer and the buttons are more like the Sony , , both on one side .\\n46 when I received my Kindle 2 I was very impressed with the design, especially the improved button design .\\n47 Tiny buttons with even tinier text on the buttons .\\n48 The incredibly tiny buttons are literally impossible for people with low, vision to read .\\n49 And the tiny buttons with the even tinier text ?\\n50 Greatly improved page turning buttons .\\n51 The codes vary depending on which button I press and the most recent code has been 90UGC .\\n52 Each time this has happened, I have contacted the support team, each time the team member has made me delete the book from the device,they've resent it to me and I've had to do the hold the power button for 20 seconds process each time .\\n53 I'm not crazy about the way that the scroll button works either .\\n54 The buttons and the controller work smoothly .\\n55 Sleek style, easy to hold, the white causes it to disappear as suggested in its description, highly transportable, well thought out button placement, easy to use, adjustable font, ease of downloading new books .\\n56 I love how the content manager is better integrated and I don't have to hit so many buttons to manage my books .\\n57 What I hate , I hate the new button positioning .\\n58 Since the K2 is longer and the buttons are near the bottom, its awkward to hold and feels unbalanced in my hands, almost like it will tip over .\\n59 When I'm trying to go to the next page, I hit the home button by accident a lot .\\n60 I also hate the fact that you really have to push the buttons hard to change the page .\\n61 I really liked the extra responsiveness of the K1 buttons .\\n62 However I was disappointed to discover that I was unable to press the buttons from that position .\\n63 With the K2 I can turn on the TTS feature with one button, place it beside me, and have it read to me all night !\\n64 I contemplated changes to my beloved Kindle with dread, I was one of the few who loved the old page, turning buttons .\\n65 I worried that the new buttons would be Sony Reader size, and impossible for me to press .\\n66 Thankfully the buttons are still at least thumb, size, and may appear hard to press, until you realize that they are hinged on the inside .\\n67 I like the new size and feel of the buttons .\\n68 It is much harder now to accidentally hit the page buttons .\\n69 But holding the darn thing was a chore without pressing that next button page .\\n70 Kind of hard to do when you're inadvertently pressing buttons .\\n71 Also the keyboard has been redesigned to make things easier as well as added buttons like menu which is nice .\\n72 I find myself using a large size typeface to compensate for the lack of contrast, but this means frequent next page button presses which is extremely annoying .\\n73 The buttons have a cheap feel .\\n74 The next page buttons should activate when pressed at any angle .\\n75 Upgrade the quality of the hardware especially the buttons .\\n76 You can pretty much figure everything out by just trying the buttons .\\n77 The next, previous, back buttons are much smaller and are hard to hit accidentally .\\n78 The keyboard buttons are small, round, low, profile and have slightly convex tops .\\n79 The on, off button is now on top and the radio on, off switch is now in a software menu .\\n80 The Kindle 1 roller button and quirky silver navigation bar are gone .\\n81 My thanks to Arts&HistoryFan for pointing out that when you hit the menu button, the time is shown in the top banner .\\n82 Yes, I noticed some of the initial design flaws in the first, generation Kindle , the placement of the next page buttons, the general sense of flimsiness , but I decided I could live with those .\\n83 Opened the box, press the button and it begins downloading books that I pre, ordered .\\n84 The welcome screen comes on to explain all the buttons .\\n85 One thing I didn't like was the page next button failed to work when the text to speech was in use and I wanted to skip ahead .\\n86 sym button depressed at same time\\n87 Buttons are accessible, raised for convenience of all involved , another big plus for the visually impaired or those with other conditions .\\n88 The sound button is raised only slightly , fine for VI but potentially problematic for those with arthritis or other issues with fine motor function as it is a relatively thin button that must be pressed slightly .\\n89 The buttons are well placed and need a good push to change pages, but not so much that it detracts from your reading .\\n90 Navigation is much easier with the 5, way button .\\n91 I miss having a dedicated button to deactivate the wireess, but the overall device has improved so much that I will get over the loss quickly .\\n92 Buttons are not hard to press for me .\\n93 They do require a bit of pressure, but I like it that way so I can rest my thumbs on the buttons without turning the page accidentally .\\n94 They seem to be in the perfect location, I can grip the K2 easily and do not have to worry about pressing a button on accident but when I need to change the page they are right where I want them .\\n95 Moving the cursor to the word in question can be a bit awkward since there is some delay using the 5 direction button, but it's not so awkward as to not use the feature .\\n96 Getting a free sample wirelessly and then just hitting a button to buy it is great .\\n97 I hate tiny gadgets with tiny screens covered with tiny buttons that lead to a labyrinth of tiny submenus filled with nonsensical options .\\n98 Click a button and it's there in seconds .\\n99 The buttons have been made smaller, which fixed the large buttons on the lst generation that made the device hard to hold and frustratingly easy to advance the page .\\n100 , One button to turn on, turn off, and sleep .\\n101 I also like the fact the button is on the top and not on the back as it was on the K1 .\\n102 I just have to use the new five way button to highlight the word and look up shows at the bottom without leaving the page .\\n103 significant improvement over Kindle 1's non intuitive forward and previous buttons .\\n104 Also I'm afraid that overusing the mouse button may cause it to wear out quickly .\\n105 If you wish to go back say a dozen pages to look up something you simply have to press the 'previous page' button 12 times in succession .\\n106 Again navigation is by using the next and previous page buttons .\\n107 My mother, in, law has enough difficulty with her fingers and the tiny buttons that she generally uses a pencil, eraser to push the buttons .\\n108 When you look at it, if you don't focus too hard, the little buttons and controls fade away and all you see is the text .\\n109 The only thing you can do is rotate, which makes some PDFs readable but then you're in the awkward position of having to press the next and previous page buttons vertically instead of horizontally .\\n110 One day while laying on the couch reading I pressed the 'next page' button and the screen went blank .\\n111 While not as much text fits on a screen as on a mass, market paperback page using the font size I like, pushing the next page button has become second nature .\\n112 My one complaint is that I'd like a previous page button on both side of the screen, the way there's a next page button on both sides, but that's a very minor consideration .\\n113 Reading the book in the cover isn't a problem as the front cover readily folds around to the back so that it isn't making the left, edge buttons hard to press .\\n114 To use the enter function, that is to execute a command or enter the text I've typed in, I just have to push downward on the square button .\\n115 The prev next back home buttons are too small ?\\n116 Add a prev page button on the right and a home button on the left .\\n117 Next page and other buttons , very easy to use .\\n118 The buttons really are much better .\\n119 I also found using the navigation button difficult .\\n120 The size and buttons are fine with me .\\n121 The new navigation button works well, and the keyboard feels good to my fingers .\\n122 The buttons are also laid out and I'm so glad they put the Next buttons on both sides since it makes it so easy to use .\\n123 The Qwerty keyboard, while the buttons are small, is spaced nicely for ease of use .\\n124 I find the Kindle buttons perfect for this type of device .\\n125 I find the buttons easy to use .\\n126 , I find the myriad of buttons on the face of the device to be very nicely done .\\n127 As highly documented before, the buttons on the side of the device used for page turning, going to the home screen, and accessing the menu all engage with an inward click .\\n128 This enables you to pick up the device with the edges without pressing any buttons .\\n129 They buttons are well placed .\\n130 The page turning buttons are a lot easier to hit than say, flipping a page in a real book while lying in bed, having said page get caught up on the covers, and having to adjust to get it squared away .\\n131 The major buttons on both sides are for the next page .\\n132 For some reason, my brain wants a prior page button on the left side and the next page button on the right .\\n133 I hit the page button once and looked left as though I had turned an actual page in a book .\\n134 A minor grumble, I keep wanting to press Next Page rather than the select button to make things happen .\\n135 Its the position of the buttons that seems to make me want to do that .\\n136 I intuitively want the biggest button to be 'select' rather than Next Page .\\n137 Your finger can rest on the next page button, and a simple click is all you need to advance .\\n138 When you hold it in the opposite hand, the next page button is on the other side too .\\n139 I don't need two hands to hold the book open when I'm on the train, or whenever, just one hand gives you good access to all the buttons even while you are holding the device .\\n140 I also love the fact they made the next and previous page buttons a little bit harder to push so I am not constantly pressing buttons I don't mean to .\\n141 The buttons work well even with my large fingers and the navigating 5, position control is easily mastered and easy to use effectively .\\n142 , new buttons are a massive step up .\\n143 You can hold the buttons on the edge and not turn pages .\\n144 There is a feeling of strength to the thumb buttons, they are not oversensitive like the old ones, and the keyboard is a great improvement over those odd keys on the K1 .\\n145 My only fear is that I will wear out my 5 direction menu button within the month, since there is SO much to see, do and find\\n146 Just hit the enter button on the keyboard, and it takes you directly to the full dictionary entry, complete with pronunciation guide .\\n147 The buttons are placed in a convenient area without being in the way, yet turning a page is a breeze .\\n148 Previous button presses inward, toward the screen, while other buttons press toward the outside edges .\\n149 All of the controls and buttons are well placed and easy to understand .\\n150 The redesign of the buttons is a great improvement .\\n151 When I purchased the Kindle originally, I had several issues with the physical layout, the inability to stop the accidental button pushing and the sharp corners .\\n152 In the Kindle 2, the corners have been rounded and the buttons have been restructured so that it takes a little pressure to press inward instead of outward .\\n153 The placement of the on off button is much better at the top rather than the back as previously .\\n154 I really enjoy the menu button and the 5, way controller to navigate .\\n155 The buttons rubbed the fingers at the bottom .\\n156 On the Kindle 2, the button has been moved to the top right side of the device .\\n157 The keyboard buttons are smaller and also require some pressure to activate .\\n158 What remains to be seen, however, is whether the Kindle 2 will be plagued with having to be reset as frequently as the Kindle, nor did I see a reset button .\\n159 I love the next page button on both sides of the Kindle 2 .\\n160 The buttons on the K2 are not easily pressed while reading, and I love the 5, way button that allows me to easily navigate between my newpaper pages .\\n161 I flicked the switch to start reading, and the screen froze with a bunch of lines on it that would flicker a bit when I hit a button, but that was all .\\n162 There is no 1, 800 number for Canada for Kindle support, so you request them to call you via a button on their site .\\n163 I hit the button, bent over to plug in the Kindle, and the phone rang before I straightened up .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cluster_label\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 1,\n \"samples\": [\n 2\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 15 + } + ], + "source": [ + "document_df[document_df['cluster_label']==2].sort_values(by='filename')" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "4e672f79-7627-4e49-9ce2-0030523dcad5", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "4e672f79-7627-4e49-9ce2-0030523dcad5", + "outputId": "47eb1a7c-477c-4142-f10c-93fc1837c7e2" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "8 /content/drive/MyDrive/topics/accuracy_garmin_nuvi_255W_gps \n", + "15 /content/drive/MyDrive/topics/directions_garmin_nuvi_255W_gps \n", + "1 /content/drive/MyDrive/topics/display_garmin_nuvi_255W_gps \n", + "7 /content/drive/MyDrive/topics/satellite_garmin_nuvi_255W_gps \n", + "13 /content/drive/MyDrive/topics/screen_garmin_nuvi_255W_gps \n", + "2 /content/drive/MyDrive/topics/speed_garmin_nuvi_255W_gps \n", + "16 /content/drive/MyDrive/topics/updates_garmin_nuvi_255W_gps \n", + "12 /content/drive/MyDrive/topics/voice_garmin_nuvi_255W_gps \n", + "\n", + " opinion_text \\\n", + "8 , and is very, very accurate .\\n0 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n1 This functi... \n", + "15 You also get upscale features like spoken directions including street names and programmable POIs .\\n0 I used to hesitate to go out of my directions but no... \n", + "1 3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ... \n", + "7 It's fast to acquire satellites .\\n0 If you've ever had a Brand X GPS take you on some strange route that adds 20 minutes to your trip, has you turn the wrong way down a one way road, tell you to turn AFTER you've passed the street, frequently loses the satellite signal, or has old maps missing streets, you know how important this stuff is .\\n1 ... \n", + "13 It is easy to read and when touching the screen it works great !\\n0 and zoom out buttons on the 255w to the same side of the screen which makes it a bit easier .\\n1 ... \n", + "2 Another feature on the 255w is a display of the posted speed limit on the road which you are currently on right above your current displayed speed .\\n0 I found myself not even looking at my car speedometer as I could easily see my current speed and the speed limit of my route at a glance .\\n1 ... \n", + "16 Another thing to consider was that I paid $50 less for the 750 and it came with the FM transmitter cable and a USB cord to connect it to your computer for updates and downloads .\\n0 update and reroute much _more_ quickly than my other GPS .\\n1 UPDATE ON THIS , It finally turned out that to see the elevation contours at lowe... \n", + "12 The voice prompts and maps are wonderful especially when driving after dark .\\n0 I also thought the the voice prompts of the 750 where more pleasant sounding than the 255w's .\\n1 ... \n", + "\n", + " cluster_label \n", + "8 3 \n", + "15 3 \n", + "1 3 \n", + "7 3 \n", + "13 3 \n", + "2 3 \n", + "16 3 \n", + "12 3 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
filenameopinion_textcluster_label
8/content/drive/MyDrive/topics/accuracy_garmin_nuvi_255W_gps, and is very, very accurate .\\n0 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n1 This functi...3
15/content/drive/MyDrive/topics/directions_garmin_nuvi_255W_gpsYou also get upscale features like spoken directions including street names and programmable POIs .\\n0 I used to hesitate to go out of my directions but no...3
1/content/drive/MyDrive/topics/display_garmin_nuvi_255W_gps3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ...3
7/content/drive/MyDrive/topics/satellite_garmin_nuvi_255W_gpsIt's fast to acquire satellites .\\n0 If you've ever had a Brand X GPS take you on some strange route that adds 20 minutes to your trip, has you turn the wrong way down a one way road, tell you to turn AFTER you've passed the street, frequently loses the satellite signal, or has old maps missing streets, you know how important this stuff is .\\n1 ...3
13/content/drive/MyDrive/topics/screen_garmin_nuvi_255W_gpsIt is easy to read and when touching the screen it works great !\\n0 and zoom out buttons on the 255w to the same side of the screen which makes it a bit easier .\\n1 ...3
2/content/drive/MyDrive/topics/speed_garmin_nuvi_255W_gpsAnother feature on the 255w is a display of the posted speed limit on the road which you are currently on right above your current displayed speed .\\n0 I found myself not even looking at my car speedometer as I could easily see my current speed and the speed limit of my route at a glance .\\n1 ...3
16/content/drive/MyDrive/topics/updates_garmin_nuvi_255W_gpsAnother thing to consider was that I paid $50 less for the 750 and it came with the FM transmitter cable and a USB cord to connect it to your computer for updates and downloads .\\n0 update and reroute much _more_ quickly than my other GPS .\\n1 UPDATE ON THIS , It finally turned out that to see the elevation contours at lowe...3
12/content/drive/MyDrive/topics/voice_garmin_nuvi_255W_gpsThe voice prompts and maps are wonderful especially when driving after dark .\\n0 I also thought the the voice prompts of the 750 where more pleasant sounding than the 255w's .\\n1 ...3
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"document_df[document_df['cluster_label']==3]\",\n \"rows\": 8,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 8,\n \"samples\": [\n \"/content/drive/MyDrive/topics/directions_garmin_nuvi_255W_gps\",\n \"/content/drive/MyDrive/topics/speed_garmin_nuvi_255W_gps\",\n \"/content/drive/MyDrive/topics/accuracy_garmin_nuvi_255W_gps\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 8,\n \"samples\": [\n \" You also get upscale features like spoken directions including street names and programmable POIs .\\n0 I used to hesitate to go out of my directions but not any more .\\n1 the directions didn't tell me anything I didn't already know after fiddling with it for 10 minutes .\\n2 It also does not offer an option to view the route as a series of turn by turn directions .\\n3 It gives your heading not in terms of degres but only in terms of one of eight directions .\\n4 The widescreen is a plus and I highly recommend it, even though it has the wide screen you can stick it in your back pocket which can be conveniently used for walking directions .\\n5 Garmin's nuvi 255W is a handy little device that provides excellent value, but more importantly spot on directions .\\n6 While I recommend that you refrain from entering a directions request while driving your car, I note that some of the more impressive features of this GPS are literally one touch away, and so mounting the device close enough to you to activite a one touch feature would seem to be relatively important .\\n7 But leaving it on the seat next to you is likely to cause a few double takes because as comfortable as you think you're going to be just listening for directions, the fact remains that the graphics will attract your eyeballs like a moth to a flame .\\n8 I've found the directions in major metropolitan areas to be excellent .\\n9 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n10 Another screen at the touch of the button will show you the turn by turn directions coming up so that you can plan even better, especially in areas that you have just enough familiarity to be considered dangerous .\\n11 I like how the Garmin 255W doesn't make you type in complete directions when it isn't necessary .\\n12 The only other annoyance of any time is that if you deviate from your route and don't indicate that you are detouring, you get to hear the Garmin repeatedly chastize you because it has to recalulate your directions .\\n13 No more firing up the computer, going to the site, printing the directions .\\n14 It speaks the directions so that you don't have to keep looking down at a piece of paper .\\n15 It allows for detours with directions on how to get back .\\n16 Saves mobile phone minutes, because you don't have to call and ask for directions .\\n17 Traffic directions are as good and detailed as can be, as you would expect from a Garmin, and less intrusive than on some other brands .\\n18 In closing, this is a fantastic GPS with some very nice features and is very accurate in directions .\\n19 The sound is tolerable, but when you are hearing spoken directions a lot, it gets really annoying .\\n20 However, the TTS gave me few wrong directions during my trip to NY city .\\n21 0 out of 5 stars gives strange directions, July 6, 2009\\n22 The directions are highly accurate down to a T .\\n23 Depending on what you are using it for, it is a nice adjunct to a travel trip and the directions are accurate and usually the quickest, but not always .\\n24 I tend to be a technological idiot but I figure this out, right out of the box and I hadn't even read the directions yet, , this is major easy .\\n25 Gives you immediate directions to get to the location you chose to set up as your home location .\\n26 Allows you to type in two street names, and if they intersect, the GPS unit will give you directions to that intersection .\\n27 You can touch anywhere on the map and press GO for directions to that location .\\n28 Shows you your current latitude and longitude location, and allows you to enter new coordinates to set up so you can get directions to that location .\\n29 If you missed the spoken directions, you can look at the top of the screen for written directions .\\n30 However, I much prefer robotic voices to no spoken directions at all .\\n31 Some of the verbal directions :\\n32 It should tell me to take the Southwest Drive exit, or the Buffalo Gap Road exit, like the highway sign says, or like I would verbally tell someone to take if giving them directions .\\n33 So, although the Nuvi doesn't verbalize those directions, I can look at the screen to see the exit I need to take .\\n34 Directions seemed to focus on Interstate travel and I have not played with the device enough to know if it can be set to avoid Interstates .\\n35 It lost satellite contact a couple of times on the trip but apparently picked them up again because there were no skipped directions .\\n36 Directions were easy to see and understand .\\n37 The spoken directions are generally easy to understand .\\n38 Since the directions are also displayed on the screen, I find the occasional mispronunciation entertaining and not an issue .\\n39 It does know when you are not near a public road but it cannot give directions to the road .\\n40 The spoken turn, by, turn directions are clear and very timely .\\n41 My only real gripes on the software interface side would be its inability to show 1, way streets on your overhead map and that this particular model does not support the Garmin routing feature that you can sync between your PC and their more expensive models to pick multiple waypoints instead of just a point 'A' to point 'B' directions system .\\n42 You can even get turn, by, turn directions from the program, and Google Maps has features that work with Garmin units .\\n43 Any time you're facing a closed roadway or are terribly stuck in highway traffic, you'll get a very slick change in directions to your destination given to you in literally less than 5 seconds than you ask for it .\\n44 button, and it gave us directions right to Carmel .\\n45 The purpose of the GPS is to give me directions in unfamiliar locations .\\n46 The voice directions are great, but sometimes it mispronounces names .\\n47 It takes a little while to get the satellites sometimes, but I just set it up as soon as I get in the car and by the time I'm out on the road and actually need directions it's up and going .\\n48 I had a great time torturing the poor thing and deliberately not following its directions while driving one day in downtown Sacramento .\\n49 As with the 285WT, it gave me bad directions in one place in Sacramento .\\n50 I avoided the more complex ones as I had read that FM updates can confuse the device and changing directions after the obstruction has been cleared is not a good option .\\n51 I like being able to select different voices, however when I am using Daniel with the English accent, he seems to be clearing his throat at the end of his directions .\\n52 It loads quickly, have pretty accurate directions, and can recalculate quickly when I miss a turn .\\n53 Often when I'd get a phone call or was talking to someone, it would have been nice to just have the ability to quickly make the voice directions mute .\\n54 The directions were pretty right on, with a brief glitch with the distance it was calculating for some approaching streets .\\n55 I am sure I've not even touched upon the many features this GPS boasts, but for basic travel directions for the non, techie then this is a great product .\\n56 My daughter would then call my wife, asking her to plot a course using a mapping Web site and recite the directions .\\n57 Daughter Dearest now carries the Nuvi in the glove box of her car, pulling it out, plugging it in, and getting directions whenever she needs, in a manner that notably is much faster and clearer than reading a map or calling her mother .\\n58 When it comes to directions, I'm horrible .\\n59 There are different voices you can choose to give you your directions, even Australian, American and British English .\\n60 I mainly bought the first one for my wife since she needs directions alot of the time .\\n61 It worked so well that people from the wedding were following me for directions .\\n62 In the week that I have had it, it's been spot on in providing directions and keeps up with the speed I am traveling .\\n63 The Voice Prompted turn by turn directions make it easy to get from one place to another without having to look up at the GPS, but of course you also get turn, by, turn directions on the GPS with a touch of the screen .\\n64 Amazon had the best price for this model which I chose for its ability to adjust the directions if you reroute, text to speech feature and 4 .\\n65 For the first time in several years, my husband & I took a roadtrip with no squabbling about directions .\\n66 Directions and maps are easy to use, and if you miss a turn, it updates your route in seconds .\\n67 It has worked well for local driving giving accurate directions for roads and streets .\\n68 I was so tired of having to go to Mapquest and print out directions .\\n69 The voice directions give you fair warning when you are about to take a turn, which is really important .\\n70 What the 255w does best is find a street address, business, point of interest, hospital or airport and give you turn, by, turn directions with amazing accuracy .\\n71 I would have struggled to find with my usual combination of maps and Web, based directions .\\n72 The directions the GPS gave me were absolutely correct , but the name of the highway was wrong .\\n73 Wish I had bought it about two years ago rather than spend a lot on maps and wasting time asking directions, especially in relatively remote areas of ME .\\n74 I spent 2 weeks driving around the Mid, West following Mapquest maps and directions .\\n75 I chose small towns as destinations and it always led me there without any problems, thus allowing me to enjoy the scenery of the fall foliage without worrying about using a map for directions or getting lost .\\n76 I use the map feature when I don't need directions which makes it easier to identify streets when street signs are obscured or missing .\\n77 On the negative side, the directions it gives to a given address are not always the best way to get there .\\n78 0 out of 5 stars MyOn, StarDirectionsReplacementUnit, October 15, 2009\\n79 My new Garmin 255w had very Easy Set Up, Accurate Directions to locations, User Friendly Unit to anyone in my vehicle who tried it .\\n80 This unit has replaced my GM On, Star Directions unit in my vehicle .\\n81 directions routing are perfect .\\n82 spoken directions are crystal clear .\\n83 Practiced visiting places I already knew to see how accurate the directions and maps would be .\\n84 The directions provided have all been quite accurate thus far .\\n85 No more stopping at so and so gas stations for directions .\\n86 Map is bright and detailed, voice directions are clear and loud .\\n87 It can be a little distracting the first few times you use it, but once you find the right mounting spot, it s like it's not there until you need it and then it's there waiting for you to with all the directions to get you to your destination .\\n88 I had no trouble with the volume level of the spoken directions either and found it to be an interesting and helpful tool .\\n89 Several voice options will announce both directions and street names, etc .\\n90 After a certain amount of frustration dealing with paper maps, missed exits and fumbling for directions in the dark , I decided it was time to get on the GPS car navigation wagon .\\n91 Also, there is there no asking for directions from passengers like spouses and children who have difficulty reading conventional paper maps .\\n92 Others have said that the voice directions leave something to be desired in terms of volume and clarity .\\n93 It was accurate on determing original directions and recalculating when necessary .\\n94 But driving on the highway with music on and windows down, it will be hard to hear the directions using just 70% of volume .\\n95 I didnt know the address of the mueseum so I typed it into the unit and it found not only the meuseum, but the nearest garage, the places to eat, and directions were right ON .\\n96 The display is very easy to read, and the directions were very good .\\n97 The model 255W that we received seemed to take longer to find a satelite, and the man's voice was very fast and not as clear, and at times seemed a bit confused in directions .\",\n \" Another feature on the 255w is a display of the posted speed limit on the road which you are currently on right above your current displayed speed .\\n0 I found myself not even looking at my car speedometer as I could easily see my current speed and the speed limit of my route at a glance .\\n1 My final decision was to keep the 255w and return the 750 because I really liked the graphic turn indicator and the posted speed limit and current speed indicators .\\n2 It even tells you the speed limit on most roads .\\n3 The new display posts speed limit signs of major roads flush left on the screen, which is a new feature that is also really helpful, if you're driving in an unfamiliar area .\\n4 Display is excellent , the layout of information on the screen is very good showing upcoming turns at the top, your speed, the local speed limit and the estimated time of arrival at the bottom .\\n5 But the name of the game for thieves is speed .\\n6 With a reset button, you can track your max speed, moving time, stopped time, average speed total for the trip, average moving speed, etc .\\n7 It tells you on the main screen your estimated time of arrival which will change depending upon your stops and speed .\\n8 Well, you can one up him now by not only announcing the time, but the average speed as well, and you have documented proof of the reason you were delayed for precisely 7 .\\n9 , Speed of map updates is awesome .\\n10 The navigation display shows more information, such as next turn street and speed limit, and the picture update is smooth instead of jerky as I have seen in other models .\\n11 TomTom seems to underestimate speed limits on community highways and gives sub, optimal routes .\\n12 For example, on the route from Rocky Mountain National park to Arches National Park Garmin's route is 40 mins shorter on a 7 hour drive because it chooses shorter route along minor highways instead of longer route along I, 70 with higher speed limit .\\n13 If you are driving in NYC or other major city, be prepared to add 1 minute for each red traffic light and beware that Garmin expects you to drive with a speed close to speed limit along NYC streets .\\n14 , 255w shows speed limit on most highways and some streets .\\n15 That newer interface, as another reviewer has mentioned, gives you speed limits on some major roads, shows you your current speed, puts the zoom buttons closer together, changes text size to give you road names, and shows you the direction of the next upcoming turn near the distance to the turn .\\n16 SPEED, , on most major highways, it tells what the speed limit is for that road AND tells you what your speed is .\\n17 Indicates posted speed limits of the road you are on\\n18 On the lower left hand side, this unit shows the maximum speed limit for the road you are traveling .\\n19 This is very useful feature because many a times this will help to avoid the risk of getting a speeding ticket .\\n20 By the way, the bottom menu also shows your current driving speed .\\n21 That's what the car's speedometer is for .\\n22 And, it's nice that the Garmin tells you that, at your current speed, you'll reach your destination in 43 minutes .\\n23 When you are looking at the map, you are shown the speed limit for the road you are travelling on, and your actual speed .\\n24 I have noticed that when I see a speed limit sign on the road, indicating a change of speed limit for that road, the Nuvi is not far behind in changing the speed limit on the screen .\\n25 I can see that this could at some point become out of date if the governing authority changes the speed limit on a particular road, but it is a cool function nonetheless .\\n26 It was fun to know where you are and the speed that you are going and the time you will be there .\\n27 6 Love the speed limit and actual speed indicators .\\n28 I have observed several cases on an interstate where the 255W required driving well over the speed limit in order to achieve the initial arrival estimate .\\n29 The city routes were somewhat closer but they could not have actually been faster because of the numerous traffic lights and slower driving speed .\\n30 I really love the new interface, the turn signs at the corner, speed limit indicator and the fast satellite reception .\\n31 It has a lot of good features , including a speedometer, posted speed limits on major roads, and it notes your average and max speed on your current trip .\\n32 , alerting you that a rest stop is coming up in a mile, or speed alerts .\\n33 Lastly , you can immediately see the speed limit for every road you are on .\\n34 The local speed limit is shown on left side of the screen with current driving speed shown at the bottom of the screen .\\n35 I also enjoy the estimated time of arrival feature that recalibrates itself automatically based on your travel speed .\\n36 Having the speed limit show up on the screen was also great since I was in unfamiliar territory .\\n37 I watched the screen several times as I passed by a speed limit sign, and it would change almost immediately as I passed by !\\n38 I used it the day I bought it, and then this morning, and as soon as it comes on it is ready to navigate The only downfall of this product, and the only reason I did not give it 5 stars is the fact that the speed limit it displays for the road you are on isn't 100% accurate .\\n39 The road I live off of, the speed limit is 45, the GPS says that the speed limit is 50 .\\n40 From what I have seen as far as the speed limit issue is that it is off only by 5mph, but dead on in other places .\\n41 , The speed limit sign on the display is handy but in the first week of using the GPS I found it had the wrong speed limit a couple times .\\n42 The only glitch I have found so far is that the speed limits are not 100% accurate, although the GPS, amazingly, is able to very accurately tell you how fast your vehicle is moving .\\n43 I was a little disappointed in the inaccuracy of the posted speed limit, as I'm guilty of not paying close enough attention to those signs, especially w interstate speed traps that are constantly changing up and down .\\n44 I also really like the way it shows my speed and the posted speed limit .\\n45 The posted speed limit on the screen is pretty cool too .\\n46 In the week that I have had it, it's been spot on in providing directions and keeps up with the speed I am traveling .\\n47 Shows the speed limits on the major roads !\\n48 The turn or exit instructions happen too close to the turns or exits when at highway speeds .\\n49 There should be some features built, in the device such as speed limit monitor .\\n50 This greatly helps the driver to keep his eye on the road instead of looking at the speedometer from time to time .\\n51 Some countries impose lower speed limit in residential areas .\\n52 One unexpected feature is the speed limit and actual speed displayed on the map .\\n53 The speed limit is usually correct except on recently modified highways .\\n54 I often find myself wondering if the speed limit changed and I didn't see the sign, so for this one feature I leave the unit on even if it is not navigating to a set location .\\n55 If it helps me avoid one speeding ticket it will have paid for itself .\\n56 I liked the way it tells you the speed limit and how fast you are going .\\n57 It knows exactly what the speed limit is on all major routes .\\n58 It is cool to always know what the speed limit is and exactly how fast you are traveling .\\n59 , Tells you the streets speed limit\\n60 It is very easy to use, and when driving in the US , it displays the speed limit and your speed, which is helpful when converting from Kms to Miles .\\n61 LOCAL SPEED LIMIT SOMETIMES WERE NOT CORRECT,THEN WE WOULD PASS A SPEED LIMIT SIGN & IT WOULD CORRECT ITSELF .\\n62 SHOWING ACTUAL SPEED IS NICE , ESPECIALLY FOR THE LITTLE WOMEN, AS SHE LOVES TO REMIND ME ALONG THE WAY .\\n63 Plus you can download speed cameras alerts at http :\\n64 I can't believe how accurate and detailed the information estimated time of arrival,speed limits along the way,and detailed map of my route, to name a few .\\n65 What I like most about the 255W is that it shows the road's speed limit right above your actual speed, which I find most helpful, since, again, I use it mostly in areas where I'm not familiar with the roads and local speed limits .\\n66 The new speed limit display on the 205 255 is quite helpful .\\n67 Speed of calculation, accuracy, and simplicity of operation are top notch .\",\n \" , and is very, very accurate .\\n0 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n1 This function is not accurate if you don't leave it in battery mode say, when you stop at the Cracker Barrell for lunch and to play one of those trangle games with the tees .\\n2 It provides immediate alternatives if the route from the online map program was inaccurate or blocked by an obstacle .\\n3 I've used other GPS units, as well as GPS built into cars and to this day NOTHING beats the accuracy of a Garmin GPS .\\n4 It got me from point A to point B with 100% accuracy everytime .\\n5 It has yet to disappoint, getting me everywhere with 100% accuracy .\\n6 0 out of 5 stars Honest, accurate review, , PLEASE READ !\\n7 Aside from that, every destination I've thrown at has been 100% accurate .\\n8 In closing, this is a fantastic GPS with some very nice features and is very accurate in directions .\\n9 Plus, I've always heard that there are quirks with any GPS being accurate, having POIs, etc .\\n10 DESTINATION TIME, , This is pretty accurate too .\\n11 But, it's always very accurate .\\n12 The map is pretty accurate and the Point of interest database also is good .\\n13 Most of the times, this info was very accurate .\\n14 I've even used it in the pedestrian mode, and it's amazing how accurate it is .\\n15 ONLY is only accurate when an ad says, Top sirloin steak, ONLY $1 .\\n16 The most accurate review stated that these machines are adjunct to a good map and signs on the interstate .\\n17 The directions are highly accurate down to a T .\\n18 Depending on what you are using it for, it is a nice adjunct to a travel trip and the directions are accurate and usually the quickest, but not always .\\n19 The screen is easy to see, the voice tells you where you are and it's very accurate .\\n20 It was accurate to the minute when it told me when I would arrive home .\\n21 0 out of 5 stars GPS Navigator doesn't navigate accurately on a straight road .\\n22 I was familiar with the streets and only used the Nuvi to get an accurate arrival time estimate .\\n23 but after that it is very easy and quite accurate to use .\\n24 The accuracy at this point is very good .\\n25 While the 255W routing seems generally accurate and logical, on my first use I discovered that it does have some errors in its internal map .\\n26 Bottom line is I wanted a unit that is accurate and had reliable satellite connection .\\n27 I've used it around town and find it to be extremely accurate .\\n28 I found the maps to be inaccurate at first, but after I updated them from Garmin's website everything is golden .\\n29 A lot of my friends' addresses are inaccurate by any GPS .\\n30 It loads quickly, have pretty accurate directions, and can recalculate quickly when I miss a turn .\\n31 Because the accuracy is good to the street address level, it may not be able to guide you to the exact location if your destination is inside a shopping mall .\\n32 I updated to the latest 2010 map soon after I received the unit, so the map is accurate to me .\\n33 I was blown away at the accuracy and routing capability this thing had .\\n34 I used it the day I bought it, and then this morning, and as soon as it comes on it is ready to navigate The only downfall of this product, and the only reason I did not give it 5 stars is the fact that the speed limit it displays for the road you are on isn't 100% accurate .\\n35 If your looking for a nice, accurate GPS for not so much money, got with this one .\\n36 0 out of 5 stars Inexpensive, accurate, plenty of features, August 6, 2009\\n37 The only glitch I have found so far is that the speed limits are not 100% accurate, although the GPS, amazingly, is able to very accurately tell you how fast your vehicle is moving .\\n38 I was a little disappointed in the inaccuracy of the posted speed limit, as I'm guilty of not paying close enough attention to those signs, especially w interstate speed traps that are constantly changing up and down .\\n39 The closest one that gives the most accurate route that I usually take is the Navigon .\\n40 After 2 weeks, it has yet to make a mistake, and is always completely accurate , even to the point of telling me which side of the street my destination is on .\\n41 It has worked well for local driving giving accurate directions for roads and streets .\\n42 The estimated time to arrival does not seem to calculate the travelling time accurately .\\n43 Accuracy is as good as any other unit, they all sometimes tell you you have arrived when you haven't, or continue to tell you to turn when you're already there .\\n44 Accuracy is determined by the maps .\\n45 Less traveled rural roads will not be accurate on any unit .\\n46 Accuracy is within a few yards .\\n47 What the 255w does best is find a street address, business, point of interest, hospital or airport and give you turn, by, turn directions with amazing accuracy .\\n48 The Garmin is loaded with very accurate maps that generally know the roads in even the remotest areas .\\n49 I'm really glad I bought it though, and like the easy to read graphics, the voice used to tell you the name of the street you are to turn on, the uncannily accurate estimates of mileage and time of arrival at your destination .\\n50 My new Garmin 255w had very Easy Set Up, Accurate Directions to locations, User Friendly Unit to anyone in my vehicle who tried it .\\n51 I had a GPS 10, years ago when I owned a boat that was difficult to use and with very poor accuracy so I had assumed that the road GPS wasn't any better .\\n52 Practiced visiting places I already knew to see how accurate the directions and maps would be .\\n53 Easy to use, excellent accuracy, nice and intuitive interface .\\n54 The directions provided have all been quite accurate thus far .\\n55 , Very Accurate but with one small glitch I found , I'll explain in the CONS\\n56 This is a great GPS, it is so easy to use and it is always accurate .\\n57 Very easy to operate and pretty accurate as well, only led me astray once and that was in northern Maine where roads are few and paved ones fewer .\\n58 Easy to use and amazed at how accurate this item is .\\n59 To date it's been a very easy to use and accurate .\\n60 Mounted really easily and has been very accurate .\\n61 seems to be rather accurate .\\n62 It was accurate on determing original directions and recalculating when necessary .\\n63 Highly accurate, POIs are great .\\n64 I can't believe how accurate and detailed the information estimated time of arrival,speed limits along the way,and detailed map of my route, to name a few .\\n65 Speed of calculation, accuracy, and simplicity of operation are top notch .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cluster_label\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 1,\n \"samples\": [\n 3\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 16 + } + ], + "source": [ + "document_df[document_df['cluster_label']==3].sort_values(by='filename')" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "c134eb34-84ed-4307-a187-598487591517", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "c134eb34-84ed-4307-a187-598487591517", + "outputId": "0aa66f96-8d31-4cf6-d21f-29c86113f4d9" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "20 /content/drive/MyDrive/topics/battery-life_amazon_kindle \n", + "0 /content/drive/MyDrive/topics/battery-life_ipod_nano_8gb \n", + "11 /content/drive/MyDrive/topics/battery-life_netbook_1005ha \n", + "10 /content/drive/MyDrive/topics/features_windows7 \n", + "47 /content/drive/MyDrive/topics/performance_honda_accord_2008 \n", + "25 /content/drive/MyDrive/topics/performance_netbook_1005ha \n", + "4 /content/drive/MyDrive/topics/sound_ipod_nano_8gb \n", + "3 /content/drive/MyDrive/topics/speed_windows7 \n", + "14 /content/drive/MyDrive/topics/video_ipod_nano_8gb \n", + "\n", + " opinion_text \\\n", + "20 After I plugged it in to my USB hub on my computer to charge the battery the charging cord design is very clever !\\n0 After you have paged tru a 500, page book one, page, at, a, time to get from Chapter 2 to Chapter 15, see how excited you are about a low battery and all the time it took to get there !\\n1 ... \n", + "0 short battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ... \n", + "11 6GHz 533FSB cpu, glossy display, 3, Cell 23Wh Li, ion Battery , and a 1 .\\n0 Not to mention that as of now... \n", + "10 I had to uninstall anti, virus and selected other programs, some of which did not have listings in the Programs and Features Control Panel section .\\n0 This review briefly touches upon some of the key features and enhancements of Microsoft's latest OS .\\n1 ... \n", + "47 Very happy with my 08 Accord, performance is quite adequate it has nice looks and is a great long, distance cruiser .\\n0 6, 4, 3 eco engine has poor performance and gas mileage of 22 highway .\\n1 Overall performance is good but comfort level is poor .\\n2 ... \n", + "25 The Eee Super Hybrid Engine utility lets users overclock or underclock their Eee PC's to boost performance or provide better battery life depending on their immediate requirements .\\n0 In Super Performance mode CPU, Z shows the bus speed to increase up to 169 .\\n1 One... \n", + "4 headphone jack i got a clear case for it and it i got a clear case for it and it like prvents me from being able to put the jack all the way in so the sound can b messsed up or i can get it in there and its playing well them go to move or something and it slides out .\\n0 Picture and sound quality are excellent for this typ of devic .\\n1 ... \n", + "3 Windows 7 is quite simply faster, more stable, boots faster, goes to sleep faster, comes back from sleep faster, manages your files better and on top of that it's beautiful to look at and easy to use .\\n0 , faster about 20% to 30% faster at running applications than my Vista , seriously\\n1 ... \n", + "14 I bought the 8, gig Ipod Nano that has the built, in video camera .\\n0 Itunes has an on, line store, where you may purchase and download music and videos which will install onto the ipod .\\n1 ... \n", + "\n", + " cluster_label \n", + "20 4 \n", + "0 4 \n", + "11 4 \n", + "10 4 \n", + "47 4 \n", + "25 4 \n", + "4 4 \n", + "3 4 \n", + "14 4 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
filenameopinion_textcluster_label
20/content/drive/MyDrive/topics/battery-life_amazon_kindleAfter I plugged it in to my USB hub on my computer to charge the battery the charging cord design is very clever !\\n0 After you have paged tru a 500, page book one, page, at, a, time to get from Chapter 2 to Chapter 15, see how excited you are about a low battery and all the time it took to get there !\\n1 ...4
0/content/drive/MyDrive/topics/battery-life_ipod_nano_8gbshort battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ...4
11/content/drive/MyDrive/topics/battery-life_netbook_1005ha6GHz 533FSB cpu, glossy display, 3, Cell 23Wh Li, ion Battery , and a 1 .\\n0 Not to mention that as of now...4
10/content/drive/MyDrive/topics/features_windows7I had to uninstall anti, virus and selected other programs, some of which did not have listings in the Programs and Features Control Panel section .\\n0 This review briefly touches upon some of the key features and enhancements of Microsoft's latest OS .\\n1 ...4
47/content/drive/MyDrive/topics/performance_honda_accord_2008Very happy with my 08 Accord, performance is quite adequate it has nice looks and is a great long, distance cruiser .\\n0 6, 4, 3 eco engine has poor performance and gas mileage of 22 highway .\\n1 Overall performance is good but comfort level is poor .\\n2 ...4
25/content/drive/MyDrive/topics/performance_netbook_1005haThe Eee Super Hybrid Engine utility lets users overclock or underclock their Eee PC's to boost performance or provide better battery life depending on their immediate requirements .\\n0 In Super Performance mode CPU, Z shows the bus speed to increase up to 169 .\\n1 One...4
4/content/drive/MyDrive/topics/sound_ipod_nano_8gbheadphone jack i got a clear case for it and it i got a clear case for it and it like prvents me from being able to put the jack all the way in so the sound can b messsed up or i can get it in there and its playing well them go to move or something and it slides out .\\n0 Picture and sound quality are excellent for this typ of devic .\\n1 ...4
3/content/drive/MyDrive/topics/speed_windows7Windows 7 is quite simply faster, more stable, boots faster, goes to sleep faster, comes back from sleep faster, manages your files better and on top of that it's beautiful to look at and easy to use .\\n0 , faster about 20% to 30% faster at running applications than my Vista , seriously\\n1 ...4
14/content/drive/MyDrive/topics/video_ipod_nano_8gbI bought the 8, gig Ipod Nano that has the built, in video camera .\\n0 Itunes has an on, line store, where you may purchase and download music and videos which will install onto the ipod .\\n1 ...4
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"document_df[document_df['cluster_label']==4]\",\n \"rows\": 9,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 9,\n \"samples\": [\n \"/content/drive/MyDrive/topics/speed_windows7\",\n \"/content/drive/MyDrive/topics/battery-life_ipod_nano_8gb\",\n \"/content/drive/MyDrive/topics/performance_netbook_1005ha\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 9,\n \"samples\": [\n \" Windows 7 is quite simply faster, more stable, boots faster, goes to sleep faster, comes back from sleep faster, manages your files better and on top of that it's beautiful to look at and easy to use .\\n0 , faster about 20% to 30% faster at running applications than my Vista , seriously\\n1 Yes, it'll make your computer run a bit slower but\\n2 , Fast startup and performance\\n3 Also, in my non, benchmarked experience, Windows 7 has been at least as fast as XP if not faster .\\n4 It's fast, secure, stable, visually appealing and fun to use .\\n5 For these two computers, normal use is pretty fast, , not quite as fast as Windows XP SP3, but very close .\\n6 It loads blazing fast, software runs smooth and even downloads from the internet seem to be faster .\\n7 XP SP3 Performance Comparison , smaller resource footprint, and faster start shutdown wake times .\\n8 Other than that, it starts up pretty fast .\\n9 Its faster to load, easier to use, and it has a new feature called the library where you can access all your related files in one window .\\n10 Performance wise it is slightly faster than Vista and I'm talking 10 to 15 seconds difference for starting the computer, other computers I have the run on Linux still start in less than 1 quarter the time that Windows 7 does .\\n11 If you have newer hardware, 64, bit is probably the way to go as it is faster and will allow you to take advantage of more than 3 .\\n12 Installation took about 30 minutes, actually much faster than any other OS install I've ever done .\\n13 Overall the OS just 'feels' faster, snappier, and easier to use .\\n14 If you want a stable, fast, visually appealing and advances OS, W7 will not disappoint .\\n15 It does boot up faster than Vista, I do like the taskbar at the bottom as you can pin icons to start all of your programs and you can start a program with the desired file opening .\\n16 Although Win 7 seems a bit faster than Vista did, I do not notice any decrease in the start, up time .\\n17 It may be that Win7 is faster, sounder, prettier, etc .\\n18 Yes the comp does boot a bit faster, but it's going to take a lot sequences to break even on the time spent so far .\\n19 It may or may not be a little faster .\\n20 W7 is fast and resource friendly, every hardware device works perfect , and there's a ton of great features .\\n21 My system seems to be faster, all of my previous programs and peripherals run without a problem, things come up quicker when clicking on them and I love the new look .\\n22 How about allowing the user to keep the menu open so thathe she doesn't have to repeatedly click to open it if there's a failure or the connection is to slow ?\\n23 1 Very fast SDHC scanning speed in comparison to vista and xp big headache relief .\\n24 It might do that on vista but I got the trojans recently and haven't been using vista as much since it's on a slow HP mini netbook that gets sickeningly hot to the touch .\\n25 5 Seems to load the desktop much faster than vista, but it might be because I have 2 gigs of ram on my w7 netbook and only 1 on my vista one .\\n26 This is much faster than visata and I love it .\\n27 Some of the things I like most about Windows 7 is how fast it boots up and shuts off .\\n28 When I ran Vista, it was a bit slower .\\n29 But Windows 7 is definitely faster !\\n30 It is also way faster than what I experience using Windows XP, but I won't get into that .\\n31 It is more stable than Vista and wakes up from sleep much faster, also boots faster .\\n32 It boots faster and shuts down faster than XP .\\n33 XP Mode worked on everything I had except an Honestech analog video capture device, but seemed to be slower .\\n34 I like many other people, was running Vista and tired of it being so slow and crashing .\\n35 As far as speed, I will admit that its not as fast as XP .\\n36 The speed at which the upgrade completed is quite fast and the driver hardware detection was seamless .\\n37 The machines run as fast as ever with new functionality and better stability .\\n38 fast, stable, compatible, and cool .\\n39 It is as fast as Vista if not faster .\\n40 It's very stable, it seems significantly faster than Vista, and it has got rid of most of the redundant security conformation dialogs .\\n41 Programs load and run faster than ever .\\n42 Windows 7 is also faster in the core of the operating system .\\n43 The operating system loads faster, shuts off faster and so far has need a 3 finger salute , control alt delete about as often as Vista .\\n44 I do note this computer is running much faster but part of that may well be that it now has 4 gb of memory as opposed to 3gb\\n45 All the applications that I checked worked OK, although Photoshop opened slowly .\\n46 Several improvements, and it does seem faster .\\n47 , RW | Creative Sound Blaster Audigy 4 | MOTU FastLane USB MIDI interface | E, MU 0404 USB audio interface | Yamaha YST, M15 speakers | HP Photosmart 8150 printer | HP Scanjet 4070 scanner | D, Link DIR, 628 router | Microsoft Natural Keyboard & Optical Mouse | Logitech RumblePad 2 | Windows 7 Home Premium x64\\n48 Also it starts faster and runs things faster .\\n49 34 seconds faster will make a HUGE difference .\\n50 I installed the 64bit version and it made my computer respond a lot faster .\\n51 I can finally use adobe CS4, before with Vista 32bit photoshop cs4 wouldn't run so smoothly as cs3 but now it opens faster and is just working great .\\n52 I ordered the upgrade disc from HP and tried 3 times to upgrade to Vista, but all 3 times I had problems with it being too slow, buggy, and my software games printer didn't work .\\n53 It's as fast as XP, and all my software and hardware work great !\\n54 It's a faster install, and you get a fresh clean install so it feels like a new computer .\\n55 My system boots much faster, and shuts down almost instantly now .\\n56 it's fast, very organized and just plain and simple witty .\\n57 Also connect time is way faster .\\n58 Finding and configuring is way more intuitive, start up and shut down is faster, and best of all, that damn hard drive light is not always on .\\n59 I have been running Win7 for a week now and and it is at least twice as fast as Win2K .\\n60 I have to say it was the smoothest, fastest, and easiest install since doing a DOS install .\\n61 Applications are noticeably faster , especially Quicken 09, Outlook 07 .\\n62 It boots faster, the programs run faster and the overall performance has been nothing short of amazing .\\n63 Vista had all of its upgrades and worked fine, but did not connect to the internet as fast .\\n64 It operates much faster, starts up faster, and rarily freezes up like the worthless Vista .\\n65 W7 does everything so much faster also .\\n66 0 out of 5 stars Fast Shipment and Excellent Value, December 17, 2009\\n67 The install took a little more time than I had expected, and encouraged backup of all data which slowed things down more, but went very smoothly .\\n68 I have been operating for two months with no problems not much different than Vista, but much faster to load and turn off .\\n69 0 out of 5 stars Faster performance, December 13, 2009\\n70 With 7, however, things have become a lot smoother and faster .\\n71 Based on speed and performance, it does deliver for it is pretty fast when opening programs, boot time, hibernation, etc .\\n72 Windows 7 is overall faster than Windows XP .\\n73 I cannot say that the system is significantly faster, or that boot or shutdown times are significantly improved, but I did not expect that .\\n74 It made my system faster which i didn't think was possible, it has a more creative appeal, i didn't lose any of my important files and the installation went smoothly and without any kinks whatsoever\\n75 Windows 7 is fun, fast and creative, , it finally gave a newer more interesting look to the paint program and i have no issues at all\\n76 My notebook runs so much faster .\\n77 I admit Windows 7 performs faster than Vista as a whole .\\n78 , Superfast file movement over a network .\\n79 We have a 5 year old laptop that we were about to throw away because it was too slow running XP .\\n80 Someone commented that maybe it was just faster because I cleaned out the bloatware that was on the old XP system .\\n81 Previously we tried to make the laptop faster by installing XP from scratch .\\n82 Now Window 7 runs smoothly, 10, 20% faster overall .\\n83 , opening applications is very slow .\\n84 I am not seeing a faster boot up or shut down at this point .\\n85 It's a bit faster than Vista and I really like the new taskbar and simplified menus .\\n86 Windows 7 home premium eliminates almost all of these and is much faster well worth the upgrade if you are going to keep your computer for a while .\\n87 It's nice to finally have a Windows OS that is fast, fun, stable, functional, and good looking .\\n88 Very robust and extremely fast, I can find and open programs or files by just hitting window on the keyboard and typing in the first few letters of the thing I want to open and Win7 almost instantaneously finds what I'm looking for .\\n89 Win7 looks great and feels fast .\\n90 faster than XP in many areas on my system .\\n91 Web apps are noticeably slower .\\n92 I had not experience any weird chokes or slowness that I had experienced in Vista .\\n93 Win7 runs faster than Vista, and is more intuitive .\\n94 In short, Win7 feels faster, leaner, and more user, friendly than Vista did .\\n95 Everything from the internet to Photoshop runs faster .\\n96 My Vista system was awful , slow and painful .\\n97 It does shut down MUCH faster and MOST of my hardware seems to work .\\n98 Upgrading over your old OS can cause problems and slow things down .\\n99 Other than that, seems very fast and works well and worth the $50 upgrade .\\n100 The upgrade process was simple, fast, and went perfectly .\\n101 Boot, hibernation, sleep, and restart procedures are much slower than XP .\\n102 It makes it a lot easier to find what you are looking for and is just all around faster .\\n103 microsoft has created a great os, easy,fast and fun to use .\\n104 Now my PC is really extremelly fast .\\n105 My laptop starts and shuts down so much faster than with Vista .\\n106 I say my start up was cut down by half the previous time and it closes even faster .\\n107 There are less steps to get to files, every application opens faster even desktop gadgets seem to function better .\\n108 I'm been using Windows 7 since its inception I upgraded from beta to RC to finally RTM and I can tell you right now it is fast and reliable .\\n109 Boot up of the Operating System is slower in the RTM for whatever reason but on newer hardware it is pretty fast .\\n110 Obviously compared to XP you know it will be slower going in but I am very happy with the operating system .\\n111 It's fast, it doesn't crash, and the interface is clean and far more Mac, like than any previous OS from M$ .\\n112 I own XP Professional and wanted a nice, clean install of Win7 so I didn't have a bunch of legacy files hanging around to slow down Win7 so I reformatted the HD before doing the Win7 install .\\n113 It is very fast and very user friendly .\\n114 Although most are saying that the start up is faster I happen to disagree, I feel its about the same .\\n115 It takes a little work to setup and doesn't run you application as fast as they would natively .\\n116 You need a faster CPU and extra memory if you plan on using this a lot .\\n117 I am very happy with the program, it is much faster, I upgraded from Windows xp, the bad part is there is no driver available to install for my HP wireless printer to work .\\n118 0 out of 5 stars Windows 7 runs slower than Vista, December 15, 2009\\n119 Since putting Windows 7 on my computer, the computer runs much slower than it did with Vista .\\n120 So I just got the Windows 7 upgrade installed , and I was instantly amazed at how fast and sleek everything looked .\\n121 Simply put, Windows 7 looks amazing, and is fast and intuitive .\\n122 I started to upload a youtube video, went away to have breakfast and came back to a blue screen of death .\",\n \" short battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 long battery scratch resistant\\n2 Battery drains even if I don't use it .\\n3 I only wonder why the battery seems to drain when I'm not using it, even after sliding the top control button to off when shutting down .\\n4 great in the car, light, portable, good quality, long battery,scratch resistant .\\n5 5G lies a more mature iPod, many steps wiser and more able than its one, year, old The iPod gains many incremental improvements, including a brighter screen and better video battery life, but probably the most appealing aspect is the tantalizing price points of $249 for the 30GB version and $349 for the huge 80GB version .\\n6 5GB and the better battery life rated for up to 6 .\\n7 battery, not dummie proof I love the color of this iPod .\\n8 Battery life isn't amazing, Definitely need to get a case for it I wanted to get a new iPod because I was upgrading from the mini .\\n9 The battery doesn't last a long time especially when you're recording or watching a video but I just listen to music most of the time and it lasts me a good length of time doing that .\\n10 doesn't take pictures, battery life It's my first ipod, but it's amazing .\\n11 Also, the battery life wasn't that long enough for me, but i'm new to this so it just might me be .\\n12 When you use the radio it uses a lot of battery life i got this exact iPod for christmas .\\n13 good quality light long battery portable scratch resistant\\n14 scratches easily, short battery life I purchased this for my 6 year old son and he LOVES IT !\\n15 Price battery replacement The iPod basically does what Apple says it does .\\n16 I do not like it that I will have to get Apple to eventually replace the battery .\\n17 I think Apple's idea is that instead of replacing the battery, you will exchange it for a newer iPod .\\n18 Make it inconvenient to replace the battery make it convenient to replace the iPod .\\n19 The Pedometer feature seems accurate, but a battery waster .\\n20 short battery life I like the product .\\n21 good quality scratch resistant light portable long battery\\n22 Battery life is short Received as a Christmas gift .\\n23 Battery life isn't great, but other than that, would highly recommend .\\n24 Battery Life Product is exactly as advertised and was probably my wife's favorite gift this past Christmas .\\n25 shortened battery life, not kind to beginners this ipod is a great new item with a camera and built in speaker .\\n26 It is easy to use and has great battery life .\\n27 Thought would have longer battery life before recharge This is my first iPOD but if endurance is as I expect will not be my last .\\n28 The battery dies quickly and seems to die quicker in cold weather .\\n29 Watching any videos drains the battery very quickly .\\n30 Battery life is much better as well .\\n31 Shorter battery life than old iPod, camera is in inconvenient spot When I first listened to a song on this iPod, the first thing that caught my attention was the audio quality .\\n32 One thing I noticed that was not so good was the battery life, but I've only charged it once and that was on the computer as far as I've seen my computer doen't charge well with either of my iPods so the battery life is possibly greater than I thought if using a wall outlet .\\n33 the battery life this was an awsome christmas present and i love it its really easy to use and sounds great .\\n34 this is my first ipod and its awsome the only thing i dont like is the battery life it lasts all day if you dont use it a lot but if you use it constantly like i do it only last about 4 or 5 hours not a big deal though .\\n35 short battery life,have to keep changing it .\\n36 the battery lasts 4 hours great product for a great price .\\n37 Battery life is excellent and the LCD display is clear and easy to see .\\n38 Long battery life and easy directions make this a snap to use .\\n39 The battery dies faster than my previous 2nd Gen Nano .\\n40 My only complaint is that the battery doesn't last as long as my previous 2nd gen nano .\\n41 The battery is great and the screen as well .\\n42 shipping charges I bought this ipod as a birthday gift and purchased the battery charger for the auto as well .\\n43 SHORT BATTERY LIFE,SCRATCHES EASY, I DONT LIKE THE APPLES LIBRARY .\\n44 Battery Life I bought this ipod to replace my 2nd gen 2gb ipod nano, because i filled that one's memory up .\\n45 The only bad thing is it's battery life .\\n46 8 hours or less is a more realistic battery life .\\n47 shoes if using vid cam for long time, it kills battery Standard Def video recording, but still sharp !\\n48 battery life, becuase of all the features I had an apple ipod 3rd generation and the 5th genteration is twice as good as the numbering would suggest .\\n49 I have not found one thing other than the battery life last for only one full day of use .\\n50 So, the battery thing is not that big a deal .\\n51 Overall, almost perfect just watch out or you will run out of battery life .\\n52 battery life, freezes up I just got the 5th gen as a replacement for my 2nd gen nano .\\n53 the pedometer is also very nice but seems like it drains the battery if you have it in always on mode .\\n54 The new Nano has a very short battery life most likely due to all the new features .\\n55 Very easy to use, love the pedometer, lightweight, thin, nice screen, great sound, battery lasts much longer than stated .\\n56 Easy to use, Great sound, long battery life, love the fact that I can tune in to my favorite radio station, and I'm into exercise so the pedometer with calories burned is a great addition .\\n57 Battery life seems to be good .\\n58 Scratches easily and the battery does not last .\\n59 The battery is not as strong as it should be .\\n60 But the battery is a little bit unpleased, but it is very good .\\n61 Battery life is bad, real bad .\\n62 Long battery life, Decent camera for such a small device, excellent sound quality and easy to use !\\n63 The video camera works great and the battery\\n64 Then you find the battery only lasts about 1 .\\n65 Long Battery Life, Sleek Compact, Easy To Set Up, Reliable Performance, Great Sound, Lots of Storage bought it for the gym and it was just the right weight !\\n66 My only complaint with this product is that the battery doesn't last long at all\\n67 I bought the nano as a replacement for an older classic, which was a great unit but time has taken it's toll on the battery and screen .\",\n \" The Eee Super Hybrid Engine utility lets users overclock or underclock their Eee PC's to boost performance or provide better battery life depending on their immediate requirements .\\n0 In Super Performance mode CPU, Z shows the bus speed to increase up to 169 .\\n1 One word of advice is to be really careful about which anti, malware software you install since it will degrade performance both on and off the internet on these netbooks .\\n2 Whatever you elect to install I would highly recommend you benchmark the performance both before and after .\\n3 I expect to get 6, 7 hours in high performance mode .\\n4 faster overall performance, and shorter charge life on the battery .\\n5 Asus' center of excellance is in very reliable, very stable, high performance circuitry, mainly motherboards .\\n6 I have the Super Hybrid Engine set to auto mode, which I'm guessing is less than High or Super Performance .\\n7 Comes with unusually well, written documentation, though I'm still a little fuzzy on the different power, saving performance modes :\\n8 Overall though, I am happy with the performance .\\n9 4 PASS , Battery life is amazing, used the laptop in Super Performance Mode for over 6 hours of watching videos, checking email, connecting with USB Verizon broadband card, and still had battery life leftover .\\n10 As for the performance of this little computer, I've gotta tell ya :\\n11 The performance is great for it's size , remember these are not designed to be speed demons but to be highly portable and cordless for extended periods of time .\\n12 Just some advice , use Eset's anti, virus and not Norton, McAfee, CA or the like , if not you will loose a lot in performance .\\n13 Upgrade to 2gb of memory, but did not seem to make much different in performance in either xp or windows 7 .\\n14 I find that the performance is great for my use on just 1GB that comes with it .\\n15 I keep a couple of apps running and its performance is great .\\n16 Amazon seems to be concerned that I am simply experiencing performance or compatibility problems , , and that my computer thus does not qualify as defective by their criteria, , but I would contend that a new computer that cannot be supplied with electricity is a complete lemon .\\n17 The reviews on many of the higher resolutions netbooks also stated poor video and processing performance .\\n18 I haven't hit my swap yet in several weeks of heavy use, and performance has been more than satisfactory for what I do with it .\\n19 Replacing them isn't very hard given a screw and five minutes, and doing so noticeably ups the performance .\\n20 Otherwise its performance has been bug, free and met all expectations .\\n21 It enhances performance, but is not absolutely necessary because this unit is a full featured machine .\\n22 The Wireless performance is great .\\n23 0 out of 5 stars Excellent balance of performance and value, October 23, 2009\\n24 I am very satisfied with the performance of the Atom processor .\\n25 This did not affect me much, I can write without problems full university texts, media files run without any problem and the battery have been used for seven consecutive hours using the computer to the maximum in High Performance Mode without depleted .\\n26 The small size makes it very easy to carry compared to a standard laptop, the long battery life is really great, and the speed and performance using various wi, fi connections was better than I expected it to be .\\n27 The only area that I've seen, so far, where the performance is not adequate, is with some streaming videos, but that's not important to me .\\n28 0 out of 5 stars Excellant Portability and Performance, August 14, 2009\\n29 I'm actually downgrading in performance in getting this netbook but the performance lost is made up with the smaller form factor and greatly increased battery life .\\n30 I then loaded Windows 7 RC and the performance has been great .\\n31 After upgrading to 2Gb of memory and deleting useless pre, installed software, performance has not been an issues .\\n32 I have the following software installed and they work great, modest but tolerable performance reduction :\\n33 No noticeable performance reduction\\n34 Performance reduction here is much less than superpi would suggest .\\n35 My desktop is a very strong dual, core computer running windows 7 and I cant see a performance decrease doing everyday things on the netbook .\\n36 1 light weight, 2 long battery life, and 3 reasonable performance .\\n37 Performance is good, screen very good, wireless very good, numerous USB ports, and keyboard layout is excellent .\\n38 Battery performance couldn't be more nice, as well as performance .\\n39 Been very pleased with performance and battery life, however power supply went out after 60 days .\\n40 The performance is fantastic , opening a browser, establishing wireless connection, opening PDF documents, opening powerpoint files and word documents is comparable to my newest desktop PC .\\n41 I had thought the RAM was too small for good performance but I was wrong .\\n42 I spent a bit of time researching the various netbooks currently available and thought that the 1005HA, P had a nice mix of style, battery life, ergonomics, and performance .\\n43 The performance and speed of this laptop is amazing .\\n44 I was aprehensive about its capabilities while buying it but after using it for 15 odd days, i am very satisfied with its performance .\\n45 I use this setting but it shouldn't be used for movies as it inhibits performance during playback .\\n46 There's only 1 GB of RAM, and that's good enough for me since I'll only be running low, performance applications .\\n47 It freaked me out since I wasn't running anything high performance .\\n48 0 out of 5 stars Good ergonomics, exceptional battery, performance meets expectations .\\n49 Very acceptable performance for what netbooks are designed to do .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cluster_label\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 1,\n \"samples\": [\n 4\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 17 + } + ], + "source": [ + "document_df[document_df['cluster_label']==4].sort_values(by='filename')" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "5c360f8b-c32e-4a5d-8575-bf5bdf3172c9", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "5c360f8b-c32e-4a5d-8575-bf5bdf3172c9", + "outputId": "de52694b-1657-41b1-a968-43664c4eace1" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "24 /content/drive/MyDrive/topics/rooms_swissotel_chicago \n", + "26 /content/drive/MyDrive/topics/food_holiday_inn_london \n", + "27 /content/drive/MyDrive/topics/service_swissotel_hotel_chicago \n", + "31 /content/drive/MyDrive/topics/room_holiday_inn_london \n", + "30 /content/drive/MyDrive/topics/service_holiday_inn_london \n", + "22 /content/drive/MyDrive/topics/food_swissotel_chicago \n", + "23 /content/drive/MyDrive/topics/location_holiday_inn_london \n", + "19 /content/drive/MyDrive/topics/staff_swissotel_chicago \n", + "48 /content/drive/MyDrive/topics/free_bestwestern_hotel_sfo \n", + "49 /content/drive/MyDrive/topics/bathroom_bestwestern_hotel_sfo \n", + "45 /content/drive/MyDrive/topics/rooms_bestwestern_hotel_sfo \n", + "42 /content/drive/MyDrive/topics/location_bestwestern_hotel_sfo \n", + "40 /content/drive/MyDrive/topics/parking_bestwestern_hotel_sfo \n", + "38 /content/drive/MyDrive/topics/service_bestwestern_hotel_sfo \n", + "39 /content/drive/MyDrive/topics/staff_bestwestern_hotel_sfo \n", + "35 /content/drive/MyDrive/topics/price_holiday_inn_london \n", + "33 /content/drive/MyDrive/topics/interior_toyota_camry_2007 \n", + "37 /content/drive/MyDrive/topics/mileage_honda_accord_2008 \n", + "50 /content/drive/MyDrive/topics/comfort_honda_accord_2008 \n", + "47 /content/drive/MyDrive/topics/performance_honda_accord_2008 \n", + "41 /content/drive/MyDrive/topics/interior_honda_accord_2008 \n", + "46 /content/drive/MyDrive/topics/seats_honda_accord_2008 \n", + "44 /content/drive/MyDrive/topics/quality_toyota_camry_2007 \n", + "43 /content/drive/MyDrive/topics/transmission_toyota_camry_2007 \n", + "2 /content/drive/MyDrive/topics/speed_garmin_nuvi_255W_gps \n", + "4 /content/drive/MyDrive/topics/sound_ipod_nano_8gb \n", + "7 /content/drive/MyDrive/topics/satellite_garmin_nuvi_255W_gps \n", + "10 /content/drive/MyDrive/topics/features_windows7 \n", + "15 /content/drive/MyDrive/topics/directions_garmin_nuvi_255W_gps \n", + "18 /content/drive/MyDrive/topics/gas_mileage_toyota_camry_2007 \n", + "29 /content/drive/MyDrive/topics/comfort_toyota_camry_2007 \n", + "1 /content/drive/MyDrive/topics/display_garmin_nuvi_255W_gps \n", + "28 /content/drive/MyDrive/topics/eyesight-issues_amazon_kindle \n", + "25 /content/drive/MyDrive/topics/performance_netbook_1005ha \n", + "21 /content/drive/MyDrive/topics/fonts_amazon_kindle \n", + "20 /content/drive/MyDrive/topics/battery-life_amazon_kindle \n", + "16 /content/drive/MyDrive/topics/updates_garmin_nuvi_255W_gps \n", + "17 /content/drive/MyDrive/topics/keyboard_netbook_1005ha \n", + "3 /content/drive/MyDrive/topics/speed_windows7 \n", + "0 /content/drive/MyDrive/topics/battery-life_ipod_nano_8gb \n", + "6 /content/drive/MyDrive/topics/screen_ipod_nano_8gb \n", + "5 /content/drive/MyDrive/topics/screen_netbook_1005ha \n", + "9 /content/drive/MyDrive/topics/size_asus_netbook_1005ha \n", + "8 /content/drive/MyDrive/topics/accuracy_garmin_nuvi_255W_gps \n", + "11 /content/drive/MyDrive/topics/battery-life_netbook_1005ha \n", + "12 /content/drive/MyDrive/topics/voice_garmin_nuvi_255W_gps \n", + "13 /content/drive/MyDrive/topics/screen_garmin_nuvi_255W_gps \n", + "14 /content/drive/MyDrive/topics/video_ipod_nano_8gb \n", + "34 /content/drive/MyDrive/topics/buttons_amazon_kindle \n", + "32 /content/drive/MyDrive/topics/navigation_amazon_kindle \n", + "36 /content/drive/MyDrive/topics/price_amazon_kindle \n", + "\n", + " opinion_text \\\n", + "24 The Swissotel is one of our favorite hotels in Chicago and the corner rooms have the most fantastic views in the city .\\n0 The rooms look like they were just remodled and upgraded, there was an HD TV and a nice iHome docking station to put my iPod so I could set the alarm to wake up with my music instead of the radio .\\n1 ... \n", + "26 The room was packed to capacity with queues at the food buffets .\\n0 The over zealous staff cleared our unfinished drinks while we were collecting cooked food and movement around the room with plates was difficult in the crowded circumstances .\\n1 ... \n", + "27 Mediocre room and service for a very extravagant price .\\n0 ... \n", + "31 We arrived at 23,30 hours and they could not recommend a restaurant so we decided to go to Tesco, with very limited choices but when you are hingry you do not careNext day they rang the bell at 8,00 hours to clean the room, not being very nice being waken up so earlyEvery day they gave u... \n", + "30 not customer, oriented hotelvery low service levelboor reception\\n0 The room was quiet, clean, the bed and pillows were comfortable, and the serv... \n", + "22 The food for our event was delicious .\\n0 ... \n", + "23 Great location for tube and we crammed in a fair amount of sightseeing in a short time .\\n0 All in all, a normal chain hotel on a nice lo... \n", + "19 The staff at Swissotel were not particularly nice .\\n0 Each time I waited at the counter for staff for several minutes and then was waved to the desk upon my turn with no hello or anything, or apology for waiting in line .\\n1 ... \n", + "48 The wine reception is a great idea as it is nice to meet other travellers and great having access to the free Internet access in our room .\\n0 They also have a computer available with free internet which is a nice bonus but I didn't find that out till the day before we left but was still able to get on there to check our flight to Vegas the next day .\\n1 ... \n", + "49 The room was not overly big, but clean and very comfortable beds, a great shower and very clean bathrooms .\\n0 The second room was smaller, with a very inconvenient bathroom layout, but at least it was quieter and we were able to sleep .\\n1 ... \n", + "45 Great Location , Nice Rooms , H... \n", + "42 Good Value good location , ideal choice .\\n0 Great Location , Nice Rooms , Helpless Concierge\\n1 ... \n", + "40 Parking was expensive but I think this is common for San Fran .\\n0 there is a fee for parking but well worth it seeing no where to park if you do have a car .\\n1 ... \n", + "38 Both of us having worked in tourism for over 14 years were very disappointed at the level of service provided by this gentleman .\\n0 The service was good, very friendly staff and we loved the free wine reception each night .\\n1 ... \n", + "39 Staff are friendl... \n", + "35 All in all, a normal chain hotel on a nice location , I will be back if I do not find anthing closer to Picadilly for a better price .\\n0 ... \n", + "33 First of all, the interior has way too many cheap plastic parts like the cheap plastic center piece that houses the clock .\\n0 3 blown struts at 30,000 miles, interior trim coming loose and rattling squeaking, stains on paint, and bug splats taking paint off, premature uneven brake wear, on 3rd windsh... \n", + "37 It's quiet, get good gas mileage and looks clean inside and out .\\n0 The mileage is great, and I've had to get used to stopping less for gas .\\n1 Thought gas ... \n", + "50 Drivers seat not comfortable, the car itself compared to other models of similar class .\\n0 ... \n", + "47 Very happy with my 08 Accord, performance is quite adequate it has nice looks and is a great long, distance cruiser .\\n0 6, 4, 3 eco engine has poor performance and gas mileage of 22 highway .\\n1 Overall performance is good but comfort level is poor .\\n2 ... \n", + "41 I love the new body style and the interior is a simple pleasure except for the center dash .\\n0 ... \n", + "46 Front seats are very uncomfortable .\\n0 No memory seats, no trip computer, can only display outside temp with trip odometer .\\n1 ... \n", + "44 I previously owned a Toyota 4Runner which had incredible build quality and reliability .\\n0 I bought the Camry because of Toyota reliability and qua... \n", + "43 After slowing down, transmission has to be kicked to speed up .\\n0 ... \n", + "2 Another feature on the 255w is a display of the posted speed limit on the road which you are currently on right above your current displayed speed .\\n0 I found myself not even looking at my car speedometer as I could easily see my current speed and the speed limit of my route at a glance .\\n1 ... \n", + "4 headphone jack i got a clear case for it and it i got a clear case for it and it like prvents me from being able to put the jack all the way in so the sound can b messsed up or i can get it in there and its playing well them go to move or something and it slides out .\\n0 Picture and sound quality are excellent for this typ of devic .\\n1 ... \n", + "7 It's fast to acquire satellites .\\n0 If you've ever had a Brand X GPS take you on some strange route that adds 20 minutes to your trip, has you turn the wrong way down a one way road, tell you to turn AFTER you've passed the street, frequently loses the satellite signal, or has old maps missing streets, you know how important this stuff is .\\n1 ... \n", + "10 I had to uninstall anti, virus and selected other programs, some of which did not have listings in the Programs and Features Control Panel section .\\n0 This review briefly touches upon some of the key features and enhancements of Microsoft's latest OS .\\n1 ... \n", + "15 You also get upscale features like spoken directions including street names and programmable POIs .\\n0 I used to hesitate to go out of my directions but no... \n", + "18 Ride seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 ... \n", + "29 Ride seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 Seats are fine, in fact of all the smaller sedans this is the most comfortable I found for the price as I am 6', 2 and 250# .\\n1 Great gas mileage and comfortable on long trips ... \n", + "1 3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ... \n", + "28 It feels as easy to read as the K1 but doesn't seem any crisper to my eyes .\\n0 the white is really GREY, and to avoid considerable eye, strain I had to refresh pages every other page .\\n1 The dream has always been a portable electronic device that could hold a ton of reading material, automate subscriptions and fa... \n", + "25 The Eee Super Hybrid Engine utility lets users overclock or underclock their Eee PC's to boost performance or provide better battery life depending on their immediate requirements .\\n0 In Super Performance mode CPU, Z shows the bus speed to increase up to 169 .\\n1 One... \n", + "21 Being able to change the font sizes is awesome !\\n0 For whatever reason, Amazon decided to make the Font on the Home Screen ... \n", + "20 After I plugged it in to my USB hub on my computer to charge the battery the charging cord design is very clever !\\n0 After you have paged tru a 500, page book one, page, at, a, time to get from Chapter 2 to Chapter 15, see how excited you are about a low battery and all the time it took to get there !\\n1 ... \n", + "16 Another thing to consider was that I paid $50 less for the 750 and it came with the FM transmitter cable and a USB cord to connect it to your computer for updates and downloads .\\n0 update and reroute much _more_ quickly than my other GPS .\\n1 UPDATE ON THIS , It finally turned out that to see the elevation contours at lowe... \n", + "17 , I think the new keyboard rivals the great hp mini keyboards .\\n0 Since the battery life difference is minimum, the only reason to upgrade would be to get the better keyboard .\\n1 The keyboard is now as good as t... \n", + "3 Windows 7 is quite simply faster, more stable, boots faster, goes to sleep faster, comes back from sleep faster, manages your files better and on top of that it's beautiful to look at and easy to use .\\n0 , faster about 20% to 30% faster at running applications than my Vista , seriously\\n1 ... \n", + "0 short battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ... \n", + "6 As always, the video screen is sharp and bright .\\n0 2, inch screen and a glossy, polished aluminum finish that one CNET editor described as looking like a Christmas tree ornament .\\n1 ... \n", + "5 Keep in mind that once you get in a room full of light or step outdoors screen reflections could become annoying .\\n0 I've used mine outsi... \n", + "9 A few other things I'd like to point out is that you must push the micro, sized right angle end of the ac adapter until it snaps in place or the battery may not charge .\\n0 The full size right shift k... \n", + "8 , and is very, very accurate .\\n0 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n1 This functi... \n", + "11 6GHz 533FSB cpu, glossy display, 3, Cell 23Wh Li, ion Battery , and a 1 .\\n0 Not to mention that as of now... \n", + "12 The voice prompts and maps are wonderful especially when driving after dark .\\n0 I also thought the the voice prompts of the 750 where more pleasant sounding than the 255w's .\\n1 ... \n", + "13 It is easy to read and when touching the screen it works great !\\n0 and zoom out buttons on the 255w to the same side of the screen which makes it a bit easier .\\n1 ... \n", + "14 I bought the 8, gig Ipod Nano that has the built, in video camera .\\n0 Itunes has an on, line store, where you may purchase and download music and videos which will install onto the ipod .\\n1 ... \n", + "34 I thought it would be fitting to christen my Kindle with the Stephen King novella UR, so went to the Amazon site on my computer and clicked on the button to buy it .\\n0 As soon as I'd clicked the button to confirm my order it appeared on my Kindle almost immediately !\\n1 ... \n", + "32 In fact, the entire navigation structure has been completely revised , I'm still getting used to it but it's a huge step forward .\\n0 ... \n", + "36 If a case was included, as with the Kindle 1, that would have been reflected in a higher price .\\n0 lower overall price, with nice leather cover .\\n1 ... \n", + "\n", + " cluster_label \n", + "24 0 \n", + "26 0 \n", + "27 0 \n", + "31 0 \n", + "30 0 \n", + "22 0 \n", + "23 0 \n", + "19 0 \n", + "48 0 \n", + "49 0 \n", + "45 0 \n", + "42 0 \n", + "40 0 \n", + "38 0 \n", + "39 0 \n", + "35 0 \n", + "33 1 \n", + "37 1 \n", + "50 1 \n", + "47 1 \n", + "41 1 \n", + "46 1 \n", + "44 1 \n", + "43 1 \n", + "2 1 \n", + "4 1 \n", + "7 1 \n", + "10 1 \n", + "15 1 \n", + "18 1 \n", + "29 1 \n", + "1 2 \n", + "28 2 \n", + "25 2 \n", + "21 2 \n", + "20 2 \n", + "16 2 \n", + "17 2 \n", + "3 2 \n", + "0 2 \n", + "6 2 \n", + "5 2 \n", + "9 2 \n", + "8 2 \n", + "11 2 \n", + "12 2 \n", + "13 2 \n", + "14 2 \n", + "34 2 \n", + "32 2 \n", + "36 2 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
filenameopinion_textcluster_label
24/content/drive/MyDrive/topics/rooms_swissotel_chicagoThe Swissotel is one of our favorite hotels in Chicago and the corner rooms have the most fantastic views in the city .\\n0 The rooms look like they were just remodled and upgraded, there was an HD TV and a nice iHome docking station to put my iPod so I could set the alarm to wake up with my music instead of the radio .\\n1 ...0
26/content/drive/MyDrive/topics/food_holiday_inn_londonThe room was packed to capacity with queues at the food buffets .\\n0 The over zealous staff cleared our unfinished drinks while we were collecting cooked food and movement around the room with plates was difficult in the crowded circumstances .\\n1 ...0
27/content/drive/MyDrive/topics/service_swissotel_hotel_chicagoMediocre room and service for a very extravagant price .\\n0 ...0
31/content/drive/MyDrive/topics/room_holiday_inn_londonWe arrived at 23,30 hours and they could not recommend a restaurant so we decided to go to Tesco, with very limited choices but when you are hingry you do not careNext day they rang the bell at 8,00 hours to clean the room, not being very nice being waken up so earlyEvery day they gave u...0
30/content/drive/MyDrive/topics/service_holiday_inn_londonnot customer, oriented hotelvery low service levelboor reception\\n0 The room was quiet, clean, the bed and pillows were comfortable, and the serv...0
22/content/drive/MyDrive/topics/food_swissotel_chicagoThe food for our event was delicious .\\n0 ...0
23/content/drive/MyDrive/topics/location_holiday_inn_londonGreat location for tube and we crammed in a fair amount of sightseeing in a short time .\\n0 All in all, a normal chain hotel on a nice lo...0
19/content/drive/MyDrive/topics/staff_swissotel_chicagoThe staff at Swissotel were not particularly nice .\\n0 Each time I waited at the counter for staff for several minutes and then was waved to the desk upon my turn with no hello or anything, or apology for waiting in line .\\n1 ...0
48/content/drive/MyDrive/topics/free_bestwestern_hotel_sfoThe wine reception is a great idea as it is nice to meet other travellers and great having access to the free Internet access in our room .\\n0 They also have a computer available with free internet which is a nice bonus but I didn't find that out till the day before we left but was still able to get on there to check our flight to Vegas the next day .\\n1 ...0
49/content/drive/MyDrive/topics/bathroom_bestwestern_hotel_sfoThe room was not overly big, but clean and very comfortable beds, a great shower and very clean bathrooms .\\n0 The second room was smaller, with a very inconvenient bathroom layout, but at least it was quieter and we were able to sleep .\\n1 ...0
45/content/drive/MyDrive/topics/rooms_bestwestern_hotel_sfoGreat Location , Nice Rooms , H...0
42/content/drive/MyDrive/topics/location_bestwestern_hotel_sfoGood Value good location , ideal choice .\\n0 Great Location , Nice Rooms , Helpless Concierge\\n1 ...0
40/content/drive/MyDrive/topics/parking_bestwestern_hotel_sfoParking was expensive but I think this is common for San Fran .\\n0 there is a fee for parking but well worth it seeing no where to park if you do have a car .\\n1 ...0
38/content/drive/MyDrive/topics/service_bestwestern_hotel_sfoBoth of us having worked in tourism for over 14 years were very disappointed at the level of service provided by this gentleman .\\n0 The service was good, very friendly staff and we loved the free wine reception each night .\\n1 ...0
39/content/drive/MyDrive/topics/staff_bestwestern_hotel_sfoStaff are friendl...0
35/content/drive/MyDrive/topics/price_holiday_inn_londonAll in all, a normal chain hotel on a nice location , I will be back if I do not find anthing closer to Picadilly for a better price .\\n0 ...0
33/content/drive/MyDrive/topics/interior_toyota_camry_2007First of all, the interior has way too many cheap plastic parts like the cheap plastic center piece that houses the clock .\\n0 3 blown struts at 30,000 miles, interior trim coming loose and rattling squeaking, stains on paint, and bug splats taking paint off, premature uneven brake wear, on 3rd windsh...1
37/content/drive/MyDrive/topics/mileage_honda_accord_2008It's quiet, get good gas mileage and looks clean inside and out .\\n0 The mileage is great, and I've had to get used to stopping less for gas .\\n1 Thought gas ...1
50/content/drive/MyDrive/topics/comfort_honda_accord_2008Drivers seat not comfortable, the car itself compared to other models of similar class .\\n0 ...1
47/content/drive/MyDrive/topics/performance_honda_accord_2008Very happy with my 08 Accord, performance is quite adequate it has nice looks and is a great long, distance cruiser .\\n0 6, 4, 3 eco engine has poor performance and gas mileage of 22 highway .\\n1 Overall performance is good but comfort level is poor .\\n2 ...1
41/content/drive/MyDrive/topics/interior_honda_accord_2008I love the new body style and the interior is a simple pleasure except for the center dash .\\n0 ...1
46/content/drive/MyDrive/topics/seats_honda_accord_2008Front seats are very uncomfortable .\\n0 No memory seats, no trip computer, can only display outside temp with trip odometer .\\n1 ...1
44/content/drive/MyDrive/topics/quality_toyota_camry_2007I previously owned a Toyota 4Runner which had incredible build quality and reliability .\\n0 I bought the Camry because of Toyota reliability and qua...1
43/content/drive/MyDrive/topics/transmission_toyota_camry_2007After slowing down, transmission has to be kicked to speed up .\\n0 ...1
2/content/drive/MyDrive/topics/speed_garmin_nuvi_255W_gpsAnother feature on the 255w is a display of the posted speed limit on the road which you are currently on right above your current displayed speed .\\n0 I found myself not even looking at my car speedometer as I could easily see my current speed and the speed limit of my route at a glance .\\n1 ...1
4/content/drive/MyDrive/topics/sound_ipod_nano_8gbheadphone jack i got a clear case for it and it i got a clear case for it and it like prvents me from being able to put the jack all the way in so the sound can b messsed up or i can get it in there and its playing well them go to move or something and it slides out .\\n0 Picture and sound quality are excellent for this typ of devic .\\n1 ...1
7/content/drive/MyDrive/topics/satellite_garmin_nuvi_255W_gpsIt's fast to acquire satellites .\\n0 If you've ever had a Brand X GPS take you on some strange route that adds 20 minutes to your trip, has you turn the wrong way down a one way road, tell you to turn AFTER you've passed the street, frequently loses the satellite signal, or has old maps missing streets, you know how important this stuff is .\\n1 ...1
10/content/drive/MyDrive/topics/features_windows7I had to uninstall anti, virus and selected other programs, some of which did not have listings in the Programs and Features Control Panel section .\\n0 This review briefly touches upon some of the key features and enhancements of Microsoft's latest OS .\\n1 ...1
15/content/drive/MyDrive/topics/directions_garmin_nuvi_255W_gpsYou also get upscale features like spoken directions including street names and programmable POIs .\\n0 I used to hesitate to go out of my directions but no...1
18/content/drive/MyDrive/topics/gas_mileage_toyota_camry_2007Ride seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 ...1
29/content/drive/MyDrive/topics/comfort_toyota_camry_2007Ride seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 Seats are fine, in fact of all the smaller sedans this is the most comfortable I found for the price as I am 6', 2 and 250# .\\n1 Great gas mileage and comfortable on long trips ...1
1/content/drive/MyDrive/topics/display_garmin_nuvi_255W_gps3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ...2
28/content/drive/MyDrive/topics/eyesight-issues_amazon_kindleIt feels as easy to read as the K1 but doesn't seem any crisper to my eyes .\\n0 the white is really GREY, and to avoid considerable eye, strain I had to refresh pages every other page .\\n1 The dream has always been a portable electronic device that could hold a ton of reading material, automate subscriptions and fa...2
25/content/drive/MyDrive/topics/performance_netbook_1005haThe Eee Super Hybrid Engine utility lets users overclock or underclock their Eee PC's to boost performance or provide better battery life depending on their immediate requirements .\\n0 In Super Performance mode CPU, Z shows the bus speed to increase up to 169 .\\n1 One...2
21/content/drive/MyDrive/topics/fonts_amazon_kindleBeing able to change the font sizes is awesome !\\n0 For whatever reason, Amazon decided to make the Font on the Home Screen ...2
20/content/drive/MyDrive/topics/battery-life_amazon_kindleAfter I plugged it in to my USB hub on my computer to charge the battery the charging cord design is very clever !\\n0 After you have paged tru a 500, page book one, page, at, a, time to get from Chapter 2 to Chapter 15, see how excited you are about a low battery and all the time it took to get there !\\n1 ...2
16/content/drive/MyDrive/topics/updates_garmin_nuvi_255W_gpsAnother thing to consider was that I paid $50 less for the 750 and it came with the FM transmitter cable and a USB cord to connect it to your computer for updates and downloads .\\n0 update and reroute much _more_ quickly than my other GPS .\\n1 UPDATE ON THIS , It finally turned out that to see the elevation contours at lowe...2
17/content/drive/MyDrive/topics/keyboard_netbook_1005ha, I think the new keyboard rivals the great hp mini keyboards .\\n0 Since the battery life difference is minimum, the only reason to upgrade would be to get the better keyboard .\\n1 The keyboard is now as good as t...2
3/content/drive/MyDrive/topics/speed_windows7Windows 7 is quite simply faster, more stable, boots faster, goes to sleep faster, comes back from sleep faster, manages your files better and on top of that it's beautiful to look at and easy to use .\\n0 , faster about 20% to 30% faster at running applications than my Vista , seriously\\n1 ...2
0/content/drive/MyDrive/topics/battery-life_ipod_nano_8gbshort battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ...2
6/content/drive/MyDrive/topics/screen_ipod_nano_8gbAs always, the video screen is sharp and bright .\\n0 2, inch screen and a glossy, polished aluminum finish that one CNET editor described as looking like a Christmas tree ornament .\\n1 ...2
5/content/drive/MyDrive/topics/screen_netbook_1005haKeep in mind that once you get in a room full of light or step outdoors screen reflections could become annoying .\\n0 I've used mine outsi...2
9/content/drive/MyDrive/topics/size_asus_netbook_1005haA few other things I'd like to point out is that you must push the micro, sized right angle end of the ac adapter until it snaps in place or the battery may not charge .\\n0 The full size right shift k...2
8/content/drive/MyDrive/topics/accuracy_garmin_nuvi_255W_gps, and is very, very accurate .\\n0 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n1 This functi...2
11/content/drive/MyDrive/topics/battery-life_netbook_1005ha6GHz 533FSB cpu, glossy display, 3, Cell 23Wh Li, ion Battery , and a 1 .\\n0 Not to mention that as of now...2
12/content/drive/MyDrive/topics/voice_garmin_nuvi_255W_gpsThe voice prompts and maps are wonderful especially when driving after dark .\\n0 I also thought the the voice prompts of the 750 where more pleasant sounding than the 255w's .\\n1 ...2
13/content/drive/MyDrive/topics/screen_garmin_nuvi_255W_gpsIt is easy to read and when touching the screen it works great !\\n0 and zoom out buttons on the 255w to the same side of the screen which makes it a bit easier .\\n1 ...2
14/content/drive/MyDrive/topics/video_ipod_nano_8gbI bought the 8, gig Ipod Nano that has the built, in video camera .\\n0 Itunes has an on, line store, where you may purchase and download music and videos which will install onto the ipod .\\n1 ...2
34/content/drive/MyDrive/topics/buttons_amazon_kindleI thought it would be fitting to christen my Kindle with the Stephen King novella UR, so went to the Amazon site on my computer and clicked on the button to buy it .\\n0 As soon as I'd clicked the button to confirm my order it appeared on my Kindle almost immediately !\\n1 ...2
32/content/drive/MyDrive/topics/navigation_amazon_kindleIn fact, the entire navigation structure has been completely revised , I'm still getting used to it but it's a huge step forward .\\n0 ...2
36/content/drive/MyDrive/topics/price_amazon_kindleIf a case was included, as with the Kindle 1, that would have been reflected in a higher price .\\n0 lower overall price, with nice leather cover .\\n1 ...2
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"document_df\",\n \"rows\": 51,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 51,\n \"samples\": [\n \"/content/drive/MyDrive/topics/accuracy_garmin_nuvi_255W_gps\",\n \"/content/drive/MyDrive/topics/screen_ipod_nano_8gb\",\n \"/content/drive/MyDrive/topics/screen_garmin_nuvi_255W_gps\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 51,\n \"samples\": [\n \" , and is very, very accurate .\\n0 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n1 This function is not accurate if you don't leave it in battery mode say, when you stop at the Cracker Barrell for lunch and to play one of those trangle games with the tees .\\n2 It provides immediate alternatives if the route from the online map program was inaccurate or blocked by an obstacle .\\n3 I've used other GPS units, as well as GPS built into cars and to this day NOTHING beats the accuracy of a Garmin GPS .\\n4 It got me from point A to point B with 100% accuracy everytime .\\n5 It has yet to disappoint, getting me everywhere with 100% accuracy .\\n6 0 out of 5 stars Honest, accurate review, , PLEASE READ !\\n7 Aside from that, every destination I've thrown at has been 100% accurate .\\n8 In closing, this is a fantastic GPS with some very nice features and is very accurate in directions .\\n9 Plus, I've always heard that there are quirks with any GPS being accurate, having POIs, etc .\\n10 DESTINATION TIME, , This is pretty accurate too .\\n11 But, it's always very accurate .\\n12 The map is pretty accurate and the Point of interest database also is good .\\n13 Most of the times, this info was very accurate .\\n14 I've even used it in the pedestrian mode, and it's amazing how accurate it is .\\n15 ONLY is only accurate when an ad says, Top sirloin steak, ONLY $1 .\\n16 The most accurate review stated that these machines are adjunct to a good map and signs on the interstate .\\n17 The directions are highly accurate down to a T .\\n18 Depending on what you are using it for, it is a nice adjunct to a travel trip and the directions are accurate and usually the quickest, but not always .\\n19 The screen is easy to see, the voice tells you where you are and it's very accurate .\\n20 It was accurate to the minute when it told me when I would arrive home .\\n21 0 out of 5 stars GPS Navigator doesn't navigate accurately on a straight road .\\n22 I was familiar with the streets and only used the Nuvi to get an accurate arrival time estimate .\\n23 but after that it is very easy and quite accurate to use .\\n24 The accuracy at this point is very good .\\n25 While the 255W routing seems generally accurate and logical, on my first use I discovered that it does have some errors in its internal map .\\n26 Bottom line is I wanted a unit that is accurate and had reliable satellite connection .\\n27 I've used it around town and find it to be extremely accurate .\\n28 I found the maps to be inaccurate at first, but after I updated them from Garmin's website everything is golden .\\n29 A lot of my friends' addresses are inaccurate by any GPS .\\n30 It loads quickly, have pretty accurate directions, and can recalculate quickly when I miss a turn .\\n31 Because the accuracy is good to the street address level, it may not be able to guide you to the exact location if your destination is inside a shopping mall .\\n32 I updated to the latest 2010 map soon after I received the unit, so the map is accurate to me .\\n33 I was blown away at the accuracy and routing capability this thing had .\\n34 I used it the day I bought it, and then this morning, and as soon as it comes on it is ready to navigate The only downfall of this product, and the only reason I did not give it 5 stars is the fact that the speed limit it displays for the road you are on isn't 100% accurate .\\n35 If your looking for a nice, accurate GPS for not so much money, got with this one .\\n36 0 out of 5 stars Inexpensive, accurate, plenty of features, August 6, 2009\\n37 The only glitch I have found so far is that the speed limits are not 100% accurate, although the GPS, amazingly, is able to very accurately tell you how fast your vehicle is moving .\\n38 I was a little disappointed in the inaccuracy of the posted speed limit, as I'm guilty of not paying close enough attention to those signs, especially w interstate speed traps that are constantly changing up and down .\\n39 The closest one that gives the most accurate route that I usually take is the Navigon .\\n40 After 2 weeks, it has yet to make a mistake, and is always completely accurate , even to the point of telling me which side of the street my destination is on .\\n41 It has worked well for local driving giving accurate directions for roads and streets .\\n42 The estimated time to arrival does not seem to calculate the travelling time accurately .\\n43 Accuracy is as good as any other unit, they all sometimes tell you you have arrived when you haven't, or continue to tell you to turn when you're already there .\\n44 Accuracy is determined by the maps .\\n45 Less traveled rural roads will not be accurate on any unit .\\n46 Accuracy is within a few yards .\\n47 What the 255w does best is find a street address, business, point of interest, hospital or airport and give you turn, by, turn directions with amazing accuracy .\\n48 The Garmin is loaded with very accurate maps that generally know the roads in even the remotest areas .\\n49 I'm really glad I bought it though, and like the easy to read graphics, the voice used to tell you the name of the street you are to turn on, the uncannily accurate estimates of mileage and time of arrival at your destination .\\n50 My new Garmin 255w had very Easy Set Up, Accurate Directions to locations, User Friendly Unit to anyone in my vehicle who tried it .\\n51 I had a GPS 10, years ago when I owned a boat that was difficult to use and with very poor accuracy so I had assumed that the road GPS wasn't any better .\\n52 Practiced visiting places I already knew to see how accurate the directions and maps would be .\\n53 Easy to use, excellent accuracy, nice and intuitive interface .\\n54 The directions provided have all been quite accurate thus far .\\n55 , Very Accurate but with one small glitch I found , I'll explain in the CONS\\n56 This is a great GPS, it is so easy to use and it is always accurate .\\n57 Very easy to operate and pretty accurate as well, only led me astray once and that was in northern Maine where roads are few and paved ones fewer .\\n58 Easy to use and amazed at how accurate this item is .\\n59 To date it's been a very easy to use and accurate .\\n60 Mounted really easily and has been very accurate .\\n61 seems to be rather accurate .\\n62 It was accurate on determing original directions and recalculating when necessary .\\n63 Highly accurate, POIs are great .\\n64 I can't believe how accurate and detailed the information estimated time of arrival,speed limits along the way,and detailed map of my route, to name a few .\\n65 Speed of calculation, accuracy, and simplicity of operation are top notch .\",\n \" As always, the video screen is sharp and bright .\\n0 2, inch screen and a glossy, polished aluminum finish that one CNET editor described as looking like a Christmas tree ornament .\\n1 Still, video fans should consider stepping up to a product with a larger screen, such as the Zune HD or iPod Touch .\\n2 2, inch screen can now display up to 12 lines of menu text and the Now Playing screen lists artist, album, and title information in three bolder, more readable lines at the top of the screen .\\n3 Apple's iconic Click Wheel navigation can still be found on the front of the device, just below the curved glass screen .\\n4 It looks great, is easy to handle, the screen is a good size and nice and clear, and the controls are very sensitive to the touch .\\n5 And the 5th generation has a larger screen size than the previous models .\\n6 I've owned all the iPod Nanos at one point and I can honestly say that I love the screen as it's good for causal viewing of a movie or show .\\n7 However, it doesn't have the touch screen capability .\\n8 It's really amazing just how big the screen is on such an incredibly thin device .\\n9 The picture on the small screen is surprisingly clear and easy to view .\\n10 5G lies a more mature iPod, many steps wiser and more able than its one, year, old The iPod gains many incremental improvements, including a brighter screen and better video battery life, but probably the most appealing aspect is the tantalizing price points of $249 for the 30GB version and $349 for the huge 80GB version .\\n11 New features like lager screen and radio is a major plus .\\n12 The screen and built in speaker .\\n13 The screen is easy to read and the built in speaker works well .\\n14 The larger screen is a great plus .\\n15 Don't waste your money on those 200 dollar itouches or the new version of the Zune that is touchscreen and isn't even as good as the 5th Generation Nano !\\n16 video, motion sensing, screen size and sllek look I recently upgraded from the 2nd generation Nano and love the new features of the newest model .\\n17 Easy to use This new iPod is easy to use, has great features like a radio, and a nice screen .\\n18 Good features, small and light weight but a big screen .\\n19 The video camera is great and the screen size is a nice size\\n20 does do much in a very tiny space, bigger screen, , more features than previous models .\\n21 there are alot of new features in this model and a much larger screen .\\n22 Screen scratches easily Wanted an IPOD to listen to in the car .\\n23 has bigger screen, video camera .\\n24 what i also like is that it has a bigger screen than the regular ipod nano .\\n25 I found a lovely cheapo case with screen protection on amazon, and I think the gift worked out great .\\n26 the screen is bigger so i can watch movies .\\n27 i love the camra, and the larger screen, and the radio .\\n28 good screen quality Bought as a bday gift and they love it .\\n29 i couldnt think of a single thing this ipod is reallly great you can shoot videos listen to the radio plus you have 16 gigs of memory it is aweosme i really love it because its still as small as the last one only with a bigger screen and great color\\n30 slim, size, vedio camera, screen clarity, photo playing mode .\\n31 What's more, even if I cut a long essay into chips with 5k binary limit for each one, some of them may still be unreadable through the note reader since the wheel just simply doesn't work out to scroll the screen down .\\n32 Price, Size, Screen, FM Radio, Camera, Capacity, Scroll Wheel, Pedometer .\\n33 The battery is great and the screen as well .\\n34 The larger screen is a plus for sure .\\n35 Screen resolution is awesome .\\n36 Lack of a belt clip accessory that also protects the screen .\\n37 The only negative thing I would say is that I cannot find a sleeve coverwith a belt clip like I had for my 2nd gen, it was neoprene and protected the screen and thumb wheel .\\n38 Easy to use video camera, Big screen, Fun color .\\n39 Also the screen I love how big it and, how easy you can read the playlist The color rocks !\\n40 Screen does not scratch, but can get fingerprints easily .\\n41 Very easy to use, love the pedometer, lightweight, thin, nice screen, great sound, battery lasts much longer than stated .\\n42 but I'm really disappointed they didn't keep the same finish as last year's matte finish, last year's model never got fingerprints, except on the screen itself, and looked new at all times .\\n43 Nice size screen, good speakers for size, great new features, tons of colors to choose from, easy to use .\\n44 Video is impressive, speaker sound is good for size, easy menus, screen is big enough to watch movies .\\n45 Watched one last night in bed while mrs was sleeping and screen is big enough .\\n46 The old Nano stuff fits but no openings for camera lens & this screen a bit larger .\\n47 New Features, Bigger Screen .\\n48 Now all it needs is a camera that can take still pics, maybe a bigger screen, a built in antenna, and internet Buy it if you're looking for a good iPod !\\n49 Small size and Color, Gettin your Money's worth, nice screen, and video camera .\\n50 Same as last model with some differences in screen size a 2 .\\n51 The mic and camera are great, speaker is great for video playback or bedtime movie watching, the screen is now even bigger and the device is the same size but Lighter than the 4th gen nano !\\n52 If these get much smaller, though, I won't be able to read the screen .\\n53 It's small and lightweight, it looks amazing, the video quality is way better than I ever imagined it would be, and the screen is huge .\\n54 I like the fm radio, have an audio book and even downloaded a movie on it, , small screen but is watchable .\\n55 I bought the nano as a replacement for an older classic, which was a great unit but time has taken it's toll on the battery and screen .\\n56 This is a vast improvement on the last Nano, with a bigger screen and more capacity .\",\n \" It is easy to read and when touching the screen it works great !\\n0 and zoom out buttons on the 255w to the same side of the screen which makes it a bit easier .\\n1 On the 750 the zoom buttons are on opposite sides of the screen .\\n2 The screen is easily readable in the sun, and I love how it automatically dims to 20% at night .\\n3 Display is excellent , the layout of information on the screen is very good showing upcoming turns at the top, your speed, the local speed limit and the estimated time of arrival at the bottom .\\n4 The text to speech is great for not having to look down at the screen endangering yourself and others on the road and after the voice updates the Garmin put out for the 255W the scratchiness and robotic sounding voice became crisp and very audible .\\n5 The widescreen is a plus and I highly recommend it, even though it has the wide screen you can stick it in your back pocket which can be conveniently used for walking directions .\\n6 The screen is very bright and easy to see with direct sunlight and at night time .\\n7 If you are looking for a simple wide screen GPS the Nuvi 255W is the right choice .\\n8 One of my favorite features on the Garmin 255W is the odometer screen that will allow you to track all sorts of data about your long car trip .\\n9 It tells you on the main screen your estimated time of arrival which will change depending upon your stops and speed .\\n10 Additionally, I find the data in the odometer screen to be fasscinating .\\n11 Another screen at the touch of the button will show you the turn by turn directions coming up so that you can plan even better, especially in areas that you have just enough familiarity to be considered dangerous .\\n12 , 255w has an arrow at the top of the screen that shows the direction of the next turn .\\n13 To make things worse, in the the Main st may not be on the screen on the default scale .\\n14 The way map is displayed is good and the wide screen helps to see more map area .\\n15 Other than the Magellan's screen being an inch smaller , but really noticeable , the Magellan did not have text to voice, and often would take a much longer route even though we told it to take freeways .\\n16 The most noticeable thing is that the screen is much easier to read, and that the text to voice is extremely valuable and much better than a beep just as you need to turn .\\n17 On the other hand, after about a week of using the Garmin, it seems to understand where we are, and now POIs as far as 25 miles away will show up when the screen is touched .\\n18 The screen is easy to see, the voice tells you where you are and it's very accurate .\\n19 I switched to the Nuvi 255W after the screen on my Nuvi 760 got cracked .\\n20 > Same screen size as the other 4 .\\n21 > Better screen touch sensitivity\\n22 > More responsive that my old 760 , plus a better looking screen\\n23 The home screen shows four options :\\n24 Any time you are viewing the map, you can zoom in or out by tapping the appropriate icon located on the top right of the screen .\\n25 I have noticed that when I see a speed limit sign on the road, indicating a change of speed limit for that road, the Nuvi is not far behind in changing the speed limit on the screen .\\n26 If you missed the spoken directions, you can look at the top of the screen for written directions .\\n27 So, although the Nuvi doesn't verbalize those directions, I can look at the screen to see the exit I need to take .\\n28 The screen is bright and the maps are generally good .\\n29 3 Love the touch screen technology\\n30 There were a few times I drove under overpasses on the interstate and no intersection was shown on the screen .\\n31 Typical of Garmin, the product works well, wide screen is very nice .\\n32 Functionally the only slight problem is that on my unit I have to press pretty hard on the screen if I want to 'drag' the map .\\n33 The extra features of the 255W over lesser models that I find highly beneficial include spoken street names and the wide screen display .\\n34 Now the only screen I get says the system software is missing .\\n35 I use the suction cup mount because I like to keep the screen in my frame of vision without turning my head, but I make sure to take it with me when I park my car .\\n36 From the map screen it's but 2 presses on the large and accessible touchscreen to get a Where Am I ?\\n37 I also realize that even if I crashed differently I had been injured in other ways but the car were still drivable that it's but 1 press on the screen to get direction to the nearest emergency services from that lovely screen that told me where I was .\\n38 I just wish the screen is larger .\\n39 1 Wanted a wide screen model, its difficult to see the 4 \\n40 4 It has built in picture viewer and a card slot, so insert your memory card, browse to picture browser and you don't need a PC, has enough big screen to enjoy\\n41 Its for wide screen models and it fits perfectly my 255w with a flap that covers it screen .\\n42 I chose a hard type of case that zippered the screen in, as I didn't want the possibility of it sliding out .\\n43 Also, it's hard to view the screen when it's super sunny outside, but the text to speech capability is an advantage .\\n44 Before I get into the specifics of my review, let me offer one important piece of advice , , BUY A CARRYING CASE to protect the screen !\\n45 These gadgets have sensitive touchscreen menus, and I think the fact that I didn't protect the screen on my last GPS is the reason it died after only 14 months .\\n46 I had a Nuvi 205 and I really liked it but I wanted a bigger screen .\\n47 It's an emergency location feature , you can tap the screen to get your latitude and longitude .\\n48 BUT, in direct sunlight, the screen is difficult to see in my convertible .\\n49 Not only the voice gives turn, by, turn instructions, the map on the screen also has a thick purple line indicating the route ahead .\\n50 The local speed limit is shown on left side of the screen with current driving speed shown at the bottom of the screen .\\n51 One thing that would be useful is putting a mute button on the screen available at all times .\\n52 Having the speed limit show up on the screen was also great since I was in unfamiliar territory .\\n53 I watched the screen several times as I passed by a speed limit sign, and it would change almost immediately as I passed by !\\n54 I was afraid the screen on one of these things would be too small for me to see, and the last thing I need would be futzing around with a GPS screen when I'm on the road if I wanted to do that, I could drive and read a map !\\n55 The screen is huge next to some of the units I saw .\\n56 I have no problems reading it in bright sunlight, but with the voice to text, the screen is almost unnecessary .\\n57 It has a very clear and bright screen and is loaded with multiple useful features .\\n58 It has a great screen presentation that is very easy to read when it is mounted on your windshield .\\n59 3 inch screen was a slight improvement over my former 3 .\\n60 The screen is crystal clear and the voice in it is nice and loud .\\n61 The screen is large so that it is easily read while you're driving .\\n62 The wide screen and spoken street names are a must .\\n63 If I'm listening to loud music, I won't be able to hear the exact words but I can hear it vaguely and that is a cue that I should glance down at the top of the screen and see what my next move is .\\n64 There should be an external volume control on the unit, or at least volume control from the main map screen .\\n65 The posted speed limit on the screen is pretty cool too .\\n66 Also, push every icon on every screen you see .\\n67 In both instances this could have been avoided if I had just paid attention to the screen which showed the correct road highlighted .\\n68 The dashboard mount keeps the unit easily within reach so that you can safely touch the screen while driving .\\n69 Was thinking about buying the 265WT for only $45 more, but decided I didn't need bluetooth or the Traffic Feature which gives you flash advertisements on the screen .\\n70 Those are the only 2 differences between the 2 models and I'd rather not have flash advertisements coming up on my GPS screen at random .\\n71 3 Inch screen is awesome to look at both during the day and at night .\\n72 The Voice Prompted turn by turn directions make it easy to get from one place to another without having to look up at the GPS, but of course you also get turn, by, turn directions on the GPS with a touch of the screen .\\n73 The screen is clear and the instructions are good though again if you have a lot of exits or turns all in the same spot you have to be careful to just listen to the voice and watch the road or you can miss the turn .\\n74 The screen is big enough to view maps, street names, etc easily .\\n75 Sufficiently sensitive touch screen\\n76 Now if Garmin would put a compass on the main screen always pointing to the north, it would be perfect .\\n77 We love the spoken street names and the wide screen .\\n78 The 255w does not have a convenient volume control you must go through the menu system on the screen .\\n79 The screen size makes it really easy to see without being a safety hazard .\\n80 The background of the screen turns black when it's nighttime .\\n81 The user must get into a few layers of the menu to access the touch screen volume control .\\n82 Screen is clear and maps are pretty easy to follow .\\n83 I look at the direction line at the top bar of the screen to make sure I understand what the verbal instructions were .\\n84 3 inches large screen is large enough for you to see the details of the map yet not distracting you from driving .\\n85 3 inches screen and steady performance .\\n86 , Its a touch screen and a 4 .\\n87 3 wide screen also speak out the streets name and tells you when or how far to turn\\n88 , Also very quick and I mean quick reroute when you miss a turn plus smooth update position when moving, not choppy on the screen .\\n89 , EASY to read day or night you can also adjust the screen brightness\\n90 One down side is the lack of volume button on the unit you have to adjust the volume form the tool menu on the screen which can be a challenge if you want to change the volume when you are driving .\\n91 After lots of internet research, we settled on the Garmin 255W for the text, to, speech and wide screen features .\\n92 When attached to the PC, the screen just indicates the connection .\\n93 The wide screen is important because of the better keyboard .\\n94 We started with a non, touch screen which was great, then we updated to the streetpilot C330 which was a dream .\\n95 After ample research I selected the Nuvi 255W for it's abundant features, wider screen and voice communication .\\n96 Looking at comparable units, this one seems to have more features and a larger screen .\\n97 I can even see the screen without my reading glasses .\\n98 It speaks the street names if you touch the car on the screen it lets you know lat and long .\\n99 Screen size is good and I didn't want one that had blue tooth and a lot of 'extras' I wouldn't use .\\n100 With either unit, the text on the screen usually tells you what you need to know .\\n101 I've only used the wide screen versions, so I can't compare, but I personally wouldn't want to go to a smaller screen .\\n102 The Garmin nuvi 255W I bought through Amazon has a dead red pixel which is always on and what is worse is that the position of that red dot is right in the middle of the screen .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cluster_label\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 3,\n \"samples\": [\n 0,\n 1,\n 2\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 18 + } + ], + "source": [ + "from sklearn.cluster import KMeans\n", + "\n", + "km_cluster = KMeans(n_clusters=3, max_iter=10000, random_state=0)\n", + "km_cluster.fit(feature_vect)\n", + "cluster_label = km_cluster.labels_\n", + "\n", + "\n", + "document_df['cluster_label'] = cluster_label\n", + "document_df.sort_values(by='cluster_label')" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "adf7dcf6-377c-4473-ae04-9a2750cd261a", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "adf7dcf6-377c-4473-ae04-9a2750cd261a", + "outputId": "bc00c911-b64d-4dd0-9e0c-b4adffad826c" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "cluster_centers shape : (3, 4610)\n", + "[[0. 0.00099548 0.00174656 ... 0. 0.00183397 0.00144581]\n", + " [0.00258624 0.00061701 0. ... 0.00069712 0. 0. ]\n", + " [0.01062844 0. 0. ... 0.00830575 0. 0. ]]\n" + ] + } + ], + "source": [ + "cluster_centers = km_cluster.cluster_centers_\n", + "print('cluster_centers shape :',cluster_centers.shape)\n", + "print(cluster_centers)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "57498038-d4ff-49fe-9d1f-14136377ee2d", + "metadata": { + "id": "57498038-d4ff-49fe-9d1f-14136377ee2d" + }, + "outputs": [], + "source": [ + "def get_cluster_details(cluster_model, cluster_data, feature_names, clusters_num, top_n_features=10):\n", + " cluster_details = {}\n", + "\n", + " centroid_feature_ordered_ind = cluster_model.cluster_centers_.argsort()[:,::-1]\n", + "\n", + " for cluster_num in range(clusters_num):\n", + " cluster_details[cluster_num] = {}\n", + " cluster_details[cluster_num]['cluster'] = cluster_num\n", + "\n", + " top_feature_indexes = centroid_feature_ordered_ind[cluster_num, :top_n_features]\n", + " top_features = [ feature_names[ind] for ind in top_feature_indexes ]\n", + "\n", + " top_feature_values = cluster_model.cluster_centers_[cluster_num, top_feature_indexes].tolist()\n", + "\n", + " cluster_details[cluster_num]['top_features'] = top_features\n", + " cluster_details[cluster_num]['top_features_value'] = top_feature_values\n", + " filenames = cluster_data[cluster_data['cluster_label'] == cluster_num]['filename']\n", + " filenames = filenames.values.tolist()\n", + " cluster_details[cluster_num]['filenames'] = filenames\n", + "\n", + " return cluster_details" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "d9ac3591-c4fa-4a32-a999-930018f03ef3", + "metadata": { + "id": "d9ac3591-c4fa-4a32-a999-930018f03ef3" + }, + "outputs": [], + "source": [ + "def print_cluster_details(cluster_details):\n", + " for cluster_num, cluster_detail in cluster_details.items():\n", + " print('####### Cluster {0}'.format(cluster_num))\n", + " print('Top features:', cluster_detail['top_features'])\n", + " print('Reviews 파일명 :',cluster_detail['filenames'][:7])\n", + " print('==================================================')" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "3d5a8305-7841-42b4-9fb2-a92ecbb5af9e", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3d5a8305-7841-42b4-9fb2-a92ecbb5af9e", + "outputId": "f7b6d173-7d36-423f-9dc6-a979cc306b29" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "####### Cluster 0\n", + "Top features: ['room', 'hotel', 'service', 'staff', 'food', 'location', 'bathroom', 'clean', 'price', 'parking']\n", + "Reviews 파일명 : ['/content/drive/MyDrive/topics/staff_swissotel_chicago', '/content/drive/MyDrive/topics/food_swissotel_chicago', '/content/drive/MyDrive/topics/location_holiday_inn_london', '/content/drive/MyDrive/topics/rooms_swissotel_chicago', '/content/drive/MyDrive/topics/food_holiday_inn_london', '/content/drive/MyDrive/topics/service_swissotel_hotel_chicago', '/content/drive/MyDrive/topics/service_holiday_inn_london']\n", + "==================================================\n", + "####### Cluster 1\n", + "Top features: ['interior', 'seat', 'mileage', 'comfortable', 'gas', 'quality', 'gas mileage', 'car', 'transmission', 'performance']\n", + "Reviews 파일명 : ['/content/drive/MyDrive/topics/speed_garmin_nuvi_255W_gps', '/content/drive/MyDrive/topics/sound_ipod_nano_8gb', '/content/drive/MyDrive/topics/satellite_garmin_nuvi_255W_gps', '/content/drive/MyDrive/topics/features_windows7', '/content/drive/MyDrive/topics/directions_garmin_nuvi_255W_gps', '/content/drive/MyDrive/topics/gas_mileage_toyota_camry_2007', '/content/drive/MyDrive/topics/comfort_toyota_camry_2007']\n", + "==================================================\n", + "####### Cluster 2\n", + "Top features: ['screen', 'battery', 'keyboard', 'battery life', 'life', 'kindle', 'size', 'video', 'voice', 'button']\n", + "Reviews 파일명 : ['/content/drive/MyDrive/topics/battery-life_ipod_nano_8gb', '/content/drive/MyDrive/topics/display_garmin_nuvi_255W_gps', '/content/drive/MyDrive/topics/speed_windows7', '/content/drive/MyDrive/topics/screen_netbook_1005ha', '/content/drive/MyDrive/topics/screen_ipod_nano_8gb', '/content/drive/MyDrive/topics/accuracy_garmin_nuvi_255W_gps', '/content/drive/MyDrive/topics/size_asus_netbook_1005ha']\n", + "==================================================\n" + ] + } + ], + "source": [ + "feature_names = tfidf_vect.get_feature_names_out()\n", + "\n", + "cluster_details = get_cluster_details(cluster_model=km_cluster, cluster_data=document_df,\\\n", + " feature_names=feature_names, clusters_num=3, top_n_features=10 )\n", + "print_cluster_details(cluster_details)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "0bd18b4a-6609-4558-a890-ccd3b5cc5d8e", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "0bd18b4a-6609-4558-a890-ccd3b5cc5d8e", + "outputId": "a3d6a9e6-a92e-4aeb-e451-3ffbd73a6171" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "1.6.1\n" + ] + } + ], + "source": [ + "import sklearn\n", + "print(sklearn.__version__)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "fe272678-cb60-445f-ae8f-26952cdbf463", + "metadata": { + "id": "fe272678-cb60-445f-ae8f-26952cdbf463" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "def cos_similarity(v1, v2):\n", + " dot_product = np.dot(v1, v2)\n", + " l2_norm = (np.sqrt(sum(np.square(v1))) * np.sqrt(sum(np.square(v2))))\n", + " similarity = dot_product / l2_norm\n", + "\n", + " return similarity" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "172decc7-b960-48ca-a39e-c4337b00f81e", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "172decc7-b960-48ca-a39e-c4337b00f81e", + "outputId": "aa3bd1ce-400d-475b-f362-b3726f87132a" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(3, 18)\n" + ] + } + ], + "source": [ + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "\n", + "doc_list = ['if you take the blue pill, the story ends' ,\n", + " 'if you take the red pill, you stay in Wonderland',\n", + " 'if you take the red pill, I show you how deep the rabbit hole goes']\n", + "\n", + "tfidf_vect_simple = TfidfVectorizer()\n", + "feature_vect_simple = tfidf_vect_simple.fit_transform(doc_list)\n", + "print(feature_vect_simple.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "d6d574fd-bdc0-4ad5-b138-27c65249cd08", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "d6d574fd-bdc0-4ad5-b138-27c65249cd08", + "outputId": "4fb65177-0edf-440f-c9c5-3a89b89a8156" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "문장 1, 문장 2 Cosine 유사도: 0.402\n" + ] + } + ], + "source": [ + "feature_vect_dense = feature_vect_simple.todense()\n", + "\n", + "vect1 = np.array(feature_vect_dense[0]).reshape(-1,)\n", + "vect2 = np.array(feature_vect_dense[1]).reshape(-1,)\n", + "\n", + "similarity_simple = cos_similarity(vect1, vect2 )\n", + "print('문장 1, 문장 2 Cosine 유사도: {0:.3f}'.format(similarity_simple))" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "2af88a52-4057-441f-bd2f-4185234291fd", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "2af88a52-4057-441f-bd2f-4185234291fd", + "outputId": "83e87981-df8a-45fd-927c-97b80f17b0de" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "문장 1, 문장 3 Cosine 유사도: 0.404\n", + "문장 2, 문장 3 Cosine 유사도: 0.456\n" + ] + } + ], + "source": [ + "vect1 = np.array(feature_vect_dense[0]).reshape(-1,)\n", + "vect3 = np.array(feature_vect_dense[2]).reshape(-1,)\n", + "similarity_simple = cos_similarity(vect1, vect3 )\n", + "print('문장 1, 문장 3 Cosine 유사도: {0:.3f}'.format(similarity_simple))\n", + "\n", + "vect2 = np.array(feature_vect_dense[1]).reshape(-1,)\n", + "vect3 = np.array(feature_vect_dense[2]).reshape(-1,)\n", + "similarity_simple = cos_similarity(vect2, vect3 )\n", + "print('문장 2, 문장 3 Cosine 유사도: {0:.3f}'.format(similarity_simple))" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "ba7787be-da21-4302-bde4-7620666ce5f7", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ba7787be-da21-4302-bde4-7620666ce5f7", + "outputId": "ed755d53-e2eb-4b16-f0b5-d6ab195c5028" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[1. 0.40207758 0.40425045]]\n" + ] + } + ], + "source": [ + "from sklearn.metrics.pairwise import cosine_similarity\n", + "\n", + "similarity_simple_pair = cosine_similarity(feature_vect_simple[0] , feature_vect_simple)\n", + "print(similarity_simple_pair)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "7079fe64-55d4-4d6f-b0e6-5d9636e52e37", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "7079fe64-55d4-4d6f-b0e6-5d9636e52e37", + "outputId": "d2b40869-465f-40e8-dcc2-87e2a40f8215" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[0.40207758 0.40425045]]\n" + ] + } + ], + "source": [ + "from sklearn.metrics.pairwise import cosine_similarity\n", + "\n", + "similarity_simple_pair = cosine_similarity(feature_vect_simple[0] , feature_vect_simple[1:])\n", + "print(similarity_simple_pair)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "efbe9da6-81e4-4a54-9f35-26a71cd19c95", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "efbe9da6-81e4-4a54-9f35-26a71cd19c95", + "outputId": "322d0dcf-9900-4c11-9730-dd8a1cc5b216" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[1. 0.40207758 0.40425045]\n", + " [0.40207758 1. 0.45647296]\n", + " [0.40425045 0.45647296 1. ]]\n", + "shape: (3, 3)\n" + ] + } + ], + "source": [ + "similarity_simple_pair = cosine_similarity(feature_vect_simple , feature_vect_simple)\n", + "print(similarity_simple_pair)\n", + "print('shape:',similarity_simple_pair.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "192bb738-a17a-422f-8c0e-9c3be9d63e98", + "metadata": { + "id": "192bb738-a17a-422f-8c0e-9c3be9d63e98" + }, + "outputs": [], + "source": [ + "from nltk.stem import WordNetLemmatizer\n", + "import nltk\n", + "import string\n", + "\n", + "remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)\n", + "lemmar = WordNetLemmatizer()\n", + "\n", + "def LemTokens(tokens):\n", + " return [lemmar.lemmatize(token) for token in tokens]\n", + "\n", + "def LemNormalize(text):\n", + " return LemTokens(nltk.word_tokenize(text.lower().translate(remove_punct_dict)))" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "250658a2-e130-4882-ad95-9d4f0c0d3e5c", + "metadata": { + "id": "250658a2-e130-4882-ad95-9d4f0c0d3e5c" + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import glob, os\n", + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "from sklearn.cluster import KMeans\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "\n", + "path = r'/content/drive/MyDrive/topics'\n", + "all_files = glob.glob(os.path.join(path, \"*.data\"))\n", + "filename_list = []\n", + "opinion_text = []\n", + "\n", + "for file_ in all_files:\n", + " df = pd.read_table(file_,index_col=None, header=0,encoding='latin1')\n", + " filename_ = file_.split('\\\\')[-1]\n", + " filename = filename_.split('.')[0]\n", + " filename_list.append(filename)\n", + " opinion_text.append(df.to_string())\n", + "\n", + "document_df = pd.DataFrame({'filename':filename_list, 'opinion_text':opinion_text})\n", + "\n", + "tfidf_vect = TfidfVectorizer(tokenizer=LemNormalize, stop_words='english' , \\\n", + " ngram_range=(1,2), min_df=0.05, max_df=0.85 )\n", + "feature_vect = tfidf_vect.fit_transform(document_df['opinion_text'])\n", + "\n", + "km_cluster = KMeans(n_clusters=3, max_iter=10000, random_state=0)\n", + "km_cluster.fit(feature_vect)\n", + "cluster_label = km_cluster.labels_\n", + "cluster_centers = km_cluster.cluster_centers_\n", + "document_df['cluster_label'] = cluster_label" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "f1929750-ba07-41e7-835c-20698a303eee", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "f1929750-ba07-41e7-835c-20698a303eee", + "outputId": "c0d8540c-be1b-48a7-c7b5-749418693a5d" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "호텔로 클러스터링 된 문서들의 DataFrame Index: Index([0, 1, 3, 5, 6, 8, 9, 11, 12, 13, 14, 16, 17, 20, 21, 25, 28, 32, 34,\n", + " 36],\n", + " dtype='int64')\n", + "##### 비교 기준 문서명 /content/drive/MyDrive/topics/battery-life_ipod_nano_8gb 와 타 문서 유사도######\n", + "[[1. 0.02141421 0.0266354 0.21000451 0.24196461 0.03984789\n", + " 0.22762607 0.87236063 0.01822013 0.04025096 0.17228142 0.01447974\n", + " 0.12157516 0.79739847 0.0126217 0.31205868 0.02894549 0.03031244\n", + " 0.02587196 0.03481051]]\n" + ] + } + ], + "source": [ + "from sklearn.metrics.pairwise import cosine_similarity\n", + "\n", + "hotel_indexes = document_df[document_df['cluster_label']==2].index\n", + "print('호텔로 클러스터링 된 문서들의 DataFrame Index:', hotel_indexes)\n", + "\n", + "comparison_docname = document_df.iloc[hotel_indexes[0]]['filename']\n", + "print('##### 비교 기준 문서명 ',comparison_docname,' 와 타 문서 유사도######')\n", + "\n", + "''' document_df에서 추출한 Index 객체를 feature_vect로 입력하여 호텔 클러스터링된 feature_vect 추출\n", + "이를 이용하여 호텔로 클러스터링된 문서 중 첫번째 문서와 다른 문서간의 코사인 유사도 측정.'''\n", + "similarity_pair = cosine_similarity(feature_vect[hotel_indexes[0]] , feature_vect[hotel_indexes])\n", + "print(similarity_pair)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "8a186d73-7ae7-4148-8583-68eda05793a3", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 370 + }, + "id": "8a186d73-7ae7-4148-8583-68eda05793a3", + "outputId": "624547b3-b62a-4353-9b04-ca758b6f649e" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ], + "source": [ + "import seaborn as sns\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "\n", + "sorted_index = similarity_pair.argsort()[:,::-1]\n", + "sorted_index = sorted_index[:, 1:]\n", + "\n", + "hotel_sorted_indexes = hotel_indexes[sorted_index.reshape(-1)]\n", + "\n", + "hotel_1_sim_value = np.sort(similarity_pair.reshape(-1))[::-1]\n", + "hotel_1_sim_value = hotel_1_sim_value[1:]\n", + "\n", + "hotel_1_sim_df = pd.DataFrame()\n", + "hotel_1_sim_df['filename'] = document_df.iloc[hotel_sorted_indexes]['filename']\n", + "hotel_1_sim_df['similarity'] = hotel_1_sim_value\n", + "\n", + "fig1 = plt.gcf()\n", + "sns.barplot(x='similarity', y='filename',data=hotel_1_sim_df)\n", + "plt.title(comparison_docname)\n", + "fig1.savefig('p553_hotel.tif', format='tif', dpi=300, bbox_inches='tight')" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "8f8d35b0-b2a5-4c22-ae9f-779509dabb2d", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 143 + }, + "id": "8f8d35b0-b2a5-4c22-ae9f-779509dabb2d", + "outputId": "ca454f7e-922b-447a-8e10-3d78c010f967" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " id document label\n", + "0 6270596 굳 ㅋ 1\n", + "1 9274899 GDNTOPCLASSINTHECLUB 0\n", + "2 8544678 뭐야 이 평점들은.... 나쁘진 않지만 10점 짜리는 더더욱 아니잖아 0" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
iddocumentlabel
06270596굳 ㅋ1
19274899GDNTOPCLASSINTHECLUB0
28544678뭐야 이 평점들은.... 나쁘진 않지만 10점 짜리는 더더욱 아니잖아0
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "train_df", + "summary": "{\n \"name\": \"train_df\",\n \"rows\": 50000,\n \"fields\": [\n {\n \"column\": \"id\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2936823,\n \"min\": 601,\n \"max\": 10278090,\n \"num_unique_values\": 50000,\n \"samples\": [\n 9147749,\n 498994,\n 7415980\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"document\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 49157,\n \"samples\": [\n \"\\uc18c\\ub9ac\\uc9c0\\ub974\\uc9c0\\ub9c8\\ub77c!!\\uaf2d \\uacf5\\ud3ec\\uc601\\ud654\\uc5d0 \\uc790\\uc2e0\\uc5c6\\ub294 \\uac83\\ub4e4\\uc774 \\uc18c\\ub9ac\\ub9cc \\uc9c0\\ub974\\ub354\\ub77c~\\ud3ec\\uc2a4\\ud130\\uac00 \\ub354\\ubb34\\uc12d\\ub2e4\",\n \"\\ud734...\\ucc39\\ucc39\\ud558\\ub124..\",\n \"\\ub300\\ubc15~~~!\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"label\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 0,\n \"max\": 1,\n \"num_unique_values\": 2,\n \"samples\": [\n 0,\n 1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 36 + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "train_df = pd.read_csv('/content/ratings_test.txt', sep='\\t')\n", + "train_df.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "424129c4-526d-404e-8c43-5e1716c68a69", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 178 + }, + "id": "424129c4-526d-404e-8c43-5e1716c68a69", + "outputId": "59e26dff-ccf1-4822-9197-e8825e7203e5" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "label\n", + "1 25173\n", + "0 24827\n", + "Name: count, dtype: int64" + ], + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
label
125173
024827
\n", + "

" + ] + }, + "metadata": {}, + "execution_count": 37 + } + ], + "source": [ + "train_df['label'].value_counts( )" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "37262986-9b43-4946-be84-f9f29880c846", + "metadata": { + "id": "37262986-9b43-4946-be84-f9f29880c846" + }, + "outputs": [], + "source": [ + "import re\n", + "\n", + "train_df = train_df.fillna(' ')\n", + "train_df['document'] = train_df['document'].apply( lambda x : re.sub(r\"\\d+\", \" \", x) )\n", + "\n", + "test_df = pd.read_csv('ratings_test.txt', sep='\\t')\n", + "test_df = test_df.fillna(' ')\n", + "test_df['document'] = test_df['document'].apply( lambda x : re.sub(r\"\\d+\", \" \", x) )\n", + "\n", + "# id 칼럼 삭제 수행\n", + "train_df.drop('id', axis=1, inplace=True)\n", + "test_df.drop('id', axis=1, inplace=True)" + ] + }, + { + "cell_type": "code", + "source": [ + "!pip install konlpy" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vRV-u8atbcHk", + "outputId": "8fb7d1e9-f1fe-4fe0-bc4e-d8c59223bf36" + }, + "id": "vRV-u8atbcHk", + "execution_count": 39, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting konlpy\n", + " Downloading konlpy-0.6.0-py2.py3-none-any.whl.metadata (1.9 kB)\n", + "Collecting JPype1>=0.7.0 (from konlpy)\n", + " Downloading jpype1-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.9 kB)\n", + "Requirement already satisfied: lxml>=4.1.0 in /usr/local/lib/python3.11/dist-packages (from konlpy) (5.4.0)\n", + "Requirement already satisfied: numpy>=1.6 in /usr/local/lib/python3.11/dist-packages (from konlpy) (2.0.2)\n", + "Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from JPype1>=0.7.0->konlpy) (24.2)\n", + "Downloading konlpy-0.6.0-py2.py3-none-any.whl (19.4 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m19.4/19.4 MB\u001b[0m \u001b[31m58.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading jpype1-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (494 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m494.1/494.1 kB\u001b[0m \u001b[31m27.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: JPype1, konlpy\n", + "Successfully installed JPype1-1.5.2 konlpy-0.6.0\n" + ] + } + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "926a11f4-bcda-4809-9da9-75afbdfe9403", + "metadata": { + "id": "926a11f4-bcda-4809-9da9-75afbdfe9403" + }, + "outputs": [], + "source": [ + "from konlpy.tag import Twitter\n", + "\n", + "twitter = Twitter()\n", + "def tw_tokenizer(text):\n", + " tokens_ko = twitter.morphs(text)\n", + " return tokens_ko" + ] + }, + { + "cell_type": "code", + "source": [ + "from konlpy.tag import Okt\n", + "\n", + "okt = Okt()\n", + "def tw_tokenizer(text):\n", + " return okt.morphs(text)" + ], + "metadata": { + "id": "b4tJ0g4pblU7" + }, + "id": "b4tJ0g4pblU7", + "execution_count": 41, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "497c9b3e-561c-4731-b150-fe4da90247ca", + "metadata": { + "id": "497c9b3e-561c-4731-b150-fe4da90247ca" + }, + "outputs": [], + "source": [ + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.model_selection import GridSearchCV\n", + "\n", + "tfidf_vect = TfidfVectorizer(tokenizer=tw_tokenizer, ngram_range=(1,2), min_df=3, max_df=0.9)\n", + "tfidf_vect.fit(train_df['document'])\n", + "tfidf_matrix_train = tfidf_vect.transform(train_df['document'])" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "401df019-846e-48f9-82a5-37d2b4cc4a5f", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "401df019-846e-48f9-82a5-37d2b4cc4a5f", + "outputId": "bc12c947-85b1-4bcd-9c60-1d261e48ebe7" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Fitting 3 folds for each of 5 candidates, totalling 15 fits\n", + "{'C': 4.5} 0.8329\n" + ] + } + ], + "source": [ + "lg_clf = LogisticRegression(random_state=0, solver='liblinear')\n", + "\n", + "params = { 'C': [1 ,3.5, 4.5, 5.5, 10 ] }\n", + "grid_cv = GridSearchCV(lg_clf , param_grid=params , cv=3 ,scoring='accuracy', verbose=1 )\n", + "grid_cv.fit(tfidf_matrix_train , train_df['label'] )\n", + "print(grid_cv.best_params_ , round(grid_cv.best_score_,4))" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "c3f987e7-021f-40ce-8487-551c83faa108", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "c3f987e7-021f-40ce-8487-551c83faa108", + "outputId": "52dd868f-1408-416d-90ea-2911462dc1a6" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Logistic Regression 정확도: 0.94884\n" + ] + } + ], + "source": [ + "from sklearn.metrics import accuracy_score\n", + "\n", + "tfidf_matrix_test = tfidf_vect.transform(test_df['document'])\n", + "\n", + "best_estimator = grid_cv.best_estimator_\n", + "preds = best_estimator.predict(tfidf_matrix_test)\n", + "\n", + "print('Logistic Regression 정확도: ',accuracy_score(test_df['label'],preds))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:base] *", + "language": "python", + "name": "conda-base-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.2" + }, + "colab": { + "provenance": [] + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git "a/Week13_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\242\341\206\250\341\204\214\341\205\242\341\204\213\341\205\263\341\206\253.ipynb" "b/Week13_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\242\341\206\250\341\204\214\341\205\242\341\204\213\341\205\263\341\206\253.ipynb" new file mode 100644 index 0000000..beb6578 --- /dev/null +++ "b/Week13_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\242\341\206\250\341\204\214\341\205\242\341\204\213\341\205\263\341\206\253.ipynb" @@ -0,0 +1,1271 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "549a3390-f422-406f-af8b-cb76a2c37f3e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CountVectorizer Shape: (7862, 1000)\n" + ] + } + ], + "source": [ + "from sklearn.datasets import fetch_20newsgroups\n", + "from sklearn.feature_extraction.text import CountVectorizer\n", + "from sklearn.decomposition import LatentDirichletAllocation\n", + "\n", + "cats = ['rec.motorcycles', 'rec.sport.baseball', 'comp.graphics', 'comp.windows.x',\n", + " 'talk.politics.mideast', 'soc.religion.christian', 'sci.electronics', 'sci.med' ]\n", + "\n", + "news_df= fetch_20newsgroups(subset='all',remove=('headers', 'footers', 'quotes'), \n", + " categories=cats, random_state=0)\n", + "\n", + "count_vect = CountVectorizer(max_df=0.95, max_features=1000, min_df=2, stop_words='english', ngram_range=(1,2))\n", + "feat_vect = count_vect.fit_transform(news_df.data)\n", + "print('CountVectorizer Shape:', feat_vect.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "da512d23-9133-41eb-a28f-1085f18a8092", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
LatentDirichletAllocation(n_components=8, random_state=0)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "LatentDirichletAllocation(n_components=8, random_state=0)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lda = LatentDirichletAllocation(n_components=8, random_state=0)\n", + "lda.fit(feat_vect)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "f88bb685-b3aa-4b37-acc9-185267336080", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(8, 1000)\n" + ] + }, + { + "data": { + "text/plain": [ + "array([[3.60992018e+01, 1.35626798e+02, 2.15751867e+01, ...,\n", + " 3.02911688e+01, 8.66830093e+01, 6.79285199e+01],\n", + " [1.25199920e-01, 1.44401815e+01, 1.25045596e-01, ...,\n", + " 1.81506995e+02, 1.25097844e-01, 9.39593286e+01],\n", + " [3.34762663e+02, 1.25176265e-01, 1.46743299e+02, ...,\n", + " 1.25105772e-01, 3.63689741e+01, 1.25025218e-01],\n", + " ...,\n", + " [3.60204965e+01, 2.08640688e+01, 4.29606813e+00, ...,\n", + " 1.45056650e+01, 8.33854413e+00, 1.55690009e+01],\n", + " [1.25128711e-01, 1.25247756e-01, 1.25005143e-01, ...,\n", + " 9.17278769e+01, 1.25177668e-01, 3.74575887e+01],\n", + " [5.49258690e+01, 4.47009532e+00, 9.88524814e+00, ...,\n", + " 4.87048440e+01, 1.25034678e-01, 1.25074632e-01]])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(lda.components_.shape)\n", + "lda.components_" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "94485ea2-74c8-4a6e-9525-98d1b23bf8ac", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Topic # 0\n", + "year 10 game medical health team 12 20 disease cancer 1993 games years patients good\n", + "Topic # 1\n", + "don just like know people said think time ve didn right going say ll way\n", + "Topic # 2\n", + "image file jpeg program gif images output format files color entry 00 use bit 03\n", + "Topic # 3\n", + "like know don think use does just good time book read information people used post\n", + "Topic # 4\n", + "armenian israel armenians jews turkish people israeli jewish government war dos dos turkey arab armenia 000\n", + "Topic # 5\n", + "edu com available graphics ftp data pub motif mail widget software mit information version sun\n", + "Topic # 6\n", + "god people jesus church believe christ does christian say think christians bible faith sin life\n", + "Topic # 7\n", + "use dos thanks windows using window does display help like problem server need know run\n" + ] + } + ], + "source": [ + "def display_topics(model, feature_names, no_top_words):\n", + " for topic_index, topic in enumerate(model.components_):\n", + " print('Topic #',topic_index)\n", + "\n", + " topic_word_indexes = topic.argsort()[::-1]\n", + " top_indexes=topic_word_indexes[:no_top_words]\n", + " \n", + " feature_concat = ' '.join([feature_names[i] for i in top_indexes]) \n", + " print(feature_concat)\n", + "\n", + "feature_names = count_vect.get_feature_names_out()\n", + "\n", + "display_topics(lda, feature_names, 15)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "3d0f4a9d-cfa7-4aef-99d6-f1a8b3bdc9f7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
filenameopinion_text
0/Users/jaeeunb/Desktop/workspace/jupywork/topics/battery-life_ipod_nano_8gbshort battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ...
1/Users/jaeeunb/Desktop/workspace/jupywork/topics/gas_mileage_toyota_camry_2007Ride seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 ...
2/Users/jaeeunb/Desktop/workspace/jupywork/topics/room_holiday_inn_londonWe arrived at 23,30 hours and they could not recommend a restaurant so we decided to go to Tesco, with very limited choices but when you are hingry you do not careNext day they rang the bell at 8,00 hours to clean the room, not being very nice being waken up so earlyEvery day they gave u...
3/Users/jaeeunb/Desktop/workspace/jupywork/topics/location_holiday_inn_londonGreat location for tube and we crammed in a fair amount of sightseeing in a short time .\\n0 All in all, a normal chain hotel on a nice lo...
4/Users/jaeeunb/Desktop/workspace/jupywork/topics/staff_bestwestern_hotel_sfoStaff are friendl...
\n", + "
" + ], + "text/plain": [ + " filename \\\n", + "0 /Users/jaeeunb/Desktop/workspace/jupywork/topics/battery-life_ipod_nano_8gb \n", + "1 /Users/jaeeunb/Desktop/workspace/jupywork/topics/gas_mileage_toyota_camry_2007 \n", + "2 /Users/jaeeunb/Desktop/workspace/jupywork/topics/room_holiday_inn_london \n", + "3 /Users/jaeeunb/Desktop/workspace/jupywork/topics/location_holiday_inn_london \n", + "4 /Users/jaeeunb/Desktop/workspace/jupywork/topics/staff_bestwestern_hotel_sfo \n", + "\n", + " opinion_text \n", + "0 short battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ... \n", + "1 Ride seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 ... \n", + "2 We arrived at 23,30 hours and they could not recommend a restaurant so we decided to go to Tesco, with very limited choices but when you are hingry you do not careNext day they rang the bell at 8,00 hours to clean the room, not being very nice being waken up so earlyEvery day they gave u... \n", + "3 Great location for tube and we crammed in a fair amount of sightseeing in a short time .\\n0 All in all, a normal chain hotel on a nice lo... \n", + "4 Staff are friendl... " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "import glob, os\n", + "import warnings \n", + "warnings.filterwarnings('ignore')\n", + "pd.set_option('display.max_colwidth', 700)\n", + "\n", + "path = \"/Users/jaeeunb/Desktop/workspace/jupywork/topics\"\n", + "\n", + "all_files = glob.glob(os.path.join(path, \"*.data\")) \n", + "filename_list = []\n", + "opinion_text = []\n", + "\n", + "\n", + "for file_ in all_files:\n", + " df = pd.read_table(file_,index_col=None, header=0,encoding='latin1')\n", + " \n", + " \n", + " filename_ = file_.split('\\\\')[-1]\n", + " filename = filename_.split('.')[0]\n", + "\n", + " filename_list.append(filename)\n", + " opinion_text.append(df.to_string())\n", + "\n", + "document_df = pd.DataFrame({'filename':filename_list, 'opinion_text':opinion_text})\n", + "document_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "f5c4ff91-83ae-4707-aab1-76e7e4c3260c", + "metadata": {}, + "outputs": [], + "source": [ + "from nltk.stem import WordNetLemmatizer\n", + "import nltk\n", + "import string\n", + "\n", + "remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)\n", + "lemmar = WordNetLemmatizer()\n", + "\n", + "def LemTokens(tokens):\n", + " return [lemmar.lemmatize(token) for token in tokens]\n", + "\n", + "def LemNormalize(text):\n", + " return LemTokens(nltk.word_tokenize(text.lower().translate(remove_punct_dict)))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "371ad977-0859-42c6-980e-ea63918cdf38", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[nltk_data] Downloading package punkt to /Users/jaeeunb/nltk_data...\n", + "[nltk_data] Package punkt is already up-to-date!\n" + ] + }, + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import nltk\n", + "nltk.download('punkt')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "ab83ed7f-6e0d-4f66-9ddc-4f746ac77d44", + "metadata": {}, + "outputs": [ + { + "ename": "LookupError", + "evalue": "\n**********************************************************************\n Resource \u001b[93mpunkt_tab\u001b[0m not found.\n Please use the NLTK Downloader to obtain the resource:\n\n \u001b[31m>>> import nltk\n >>> nltk.download('punkt_tab')\n \u001b[0m\n For more information see: https://www.nltk.org/data.html\n\n Attempted to load \u001b[93mtokenizers/punkt_tab/english/\u001b[0m\n\n Searched in:\n - '/Users/jaeeunb/nltk_data'\n - '/opt/anaconda3/nltk_data'\n - '/opt/anaconda3/share/nltk_data'\n - '/opt/anaconda3/lib/nltk_data'\n - '/usr/share/nltk_data'\n - '/usr/local/share/nltk_data'\n - '/usr/lib/nltk_data'\n - '/usr/local/lib/nltk_data'\n**********************************************************************\n", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mLookupError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[8], line 6\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msklearn\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mfeature_extraction\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtext\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m TfidfVectorizer\n\u001b[1;32m 3\u001b[0m tfidf_vect \u001b[38;5;241m=\u001b[39m TfidfVectorizer(tokenizer\u001b[38;5;241m=\u001b[39mLemNormalize, stop_words\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124menglish\u001b[39m\u001b[38;5;124m'\u001b[39m , \\\n\u001b[1;32m 4\u001b[0m ngram_range\u001b[38;5;241m=\u001b[39m(\u001b[38;5;241m1\u001b[39m,\u001b[38;5;241m2\u001b[39m), min_df\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.05\u001b[39m, max_df\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.85\u001b[39m )\n\u001b[0;32m----> 6\u001b[0m feature_vect \u001b[38;5;241m=\u001b[39m tfidf_vect\u001b[38;5;241m.\u001b[39mfit_transform(document_df[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mopinion_text\u001b[39m\u001b[38;5;124m'\u001b[39m])\n", + "File \u001b[0;32m/opt/anaconda3/lib/python3.12/site-packages/sklearn/feature_extraction/text.py:2138\u001b[0m, in \u001b[0;36mTfidfVectorizer.fit_transform\u001b[0;34m(self, raw_documents, y)\u001b[0m\n\u001b[1;32m 2131\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_params()\n\u001b[1;32m 2132\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_tfidf \u001b[38;5;241m=\u001b[39m TfidfTransformer(\n\u001b[1;32m 2133\u001b[0m norm\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnorm,\n\u001b[1;32m 2134\u001b[0m use_idf\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39muse_idf,\n\u001b[1;32m 2135\u001b[0m smooth_idf\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msmooth_idf,\n\u001b[1;32m 2136\u001b[0m sublinear_tf\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msublinear_tf,\n\u001b[1;32m 2137\u001b[0m )\n\u001b[0;32m-> 2138\u001b[0m X \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39mfit_transform(raw_documents)\n\u001b[1;32m 2139\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_tfidf\u001b[38;5;241m.\u001b[39mfit(X)\n\u001b[1;32m 2140\u001b[0m \u001b[38;5;66;03m# X is already a transformed view of raw_documents so\u001b[39;00m\n\u001b[1;32m 2141\u001b[0m \u001b[38;5;66;03m# we set copy to False\u001b[39;00m\n", + "File \u001b[0;32m/opt/anaconda3/lib/python3.12/site-packages/sklearn/base.py:1474\u001b[0m, in \u001b[0;36m_fit_context..decorator..wrapper\u001b[0;34m(estimator, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1467\u001b[0m estimator\u001b[38;5;241m.\u001b[39m_validate_params()\n\u001b[1;32m 1469\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m config_context(\n\u001b[1;32m 1470\u001b[0m skip_parameter_validation\u001b[38;5;241m=\u001b[39m(\n\u001b[1;32m 1471\u001b[0m prefer_skip_nested_validation \u001b[38;5;129;01mor\u001b[39;00m global_skip_validation\n\u001b[1;32m 1472\u001b[0m )\n\u001b[1;32m 1473\u001b[0m ):\n\u001b[0;32m-> 1474\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m fit_method(estimator, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[0;32m/opt/anaconda3/lib/python3.12/site-packages/sklearn/feature_extraction/text.py:1389\u001b[0m, in \u001b[0;36mCountVectorizer.fit_transform\u001b[0;34m(self, raw_documents, y)\u001b[0m\n\u001b[1;32m 1381\u001b[0m warnings\u001b[38;5;241m.\u001b[39mwarn(\n\u001b[1;32m 1382\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUpper case characters found in\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1383\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m vocabulary while \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlowercase\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1384\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m is True. These entries will not\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1385\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m be matched with any documents\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1386\u001b[0m )\n\u001b[1;32m 1387\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[0;32m-> 1389\u001b[0m vocabulary, X \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_count_vocab(raw_documents, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfixed_vocabulary_)\n\u001b[1;32m 1391\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbinary:\n\u001b[1;32m 1392\u001b[0m X\u001b[38;5;241m.\u001b[39mdata\u001b[38;5;241m.\u001b[39mfill(\u001b[38;5;241m1\u001b[39m)\n", + "File \u001b[0;32m/opt/anaconda3/lib/python3.12/site-packages/sklearn/feature_extraction/text.py:1276\u001b[0m, in \u001b[0;36mCountVectorizer._count_vocab\u001b[0;34m(self, raw_documents, fixed_vocab)\u001b[0m\n\u001b[1;32m 1274\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m doc \u001b[38;5;129;01min\u001b[39;00m raw_documents:\n\u001b[1;32m 1275\u001b[0m feature_counter \u001b[38;5;241m=\u001b[39m {}\n\u001b[0;32m-> 1276\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m feature \u001b[38;5;129;01min\u001b[39;00m analyze(doc):\n\u001b[1;32m 1277\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1278\u001b[0m feature_idx \u001b[38;5;241m=\u001b[39m vocabulary[feature]\n", + "File \u001b[0;32m/opt/anaconda3/lib/python3.12/site-packages/sklearn/feature_extraction/text.py:112\u001b[0m, in \u001b[0;36m_analyze\u001b[0;34m(doc, analyzer, tokenizer, ngrams, preprocessor, decoder, stop_words)\u001b[0m\n\u001b[1;32m 110\u001b[0m doc \u001b[38;5;241m=\u001b[39m preprocessor(doc)\n\u001b[1;32m 111\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m tokenizer \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 112\u001b[0m doc \u001b[38;5;241m=\u001b[39m tokenizer(doc)\n\u001b[1;32m 113\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ngrams \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 114\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m stop_words \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "Cell \u001b[0;32mIn[6], line 12\u001b[0m, in \u001b[0;36mLemNormalize\u001b[0;34m(text)\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mLemNormalize\u001b[39m(text):\n\u001b[0;32m---> 12\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m LemTokens(nltk\u001b[38;5;241m.\u001b[39mword_tokenize(text\u001b[38;5;241m.\u001b[39mlower()\u001b[38;5;241m.\u001b[39mtranslate(remove_punct_dict)))\n", + "File \u001b[0;32m/opt/anaconda3/lib/python3.12/site-packages/nltk/tokenize/__init__.py:142\u001b[0m, in \u001b[0;36mword_tokenize\u001b[0;34m(text, language, preserve_line)\u001b[0m\n\u001b[1;32m 127\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mword_tokenize\u001b[39m(text, language\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124menglish\u001b[39m\u001b[38;5;124m\"\u001b[39m, preserve_line\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[1;32m 128\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 129\u001b[0m \u001b[38;5;124;03m Return a tokenized copy of *text*,\u001b[39;00m\n\u001b[1;32m 130\u001b[0m \u001b[38;5;124;03m using NLTK's recommended word tokenizer\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 140\u001b[0m \u001b[38;5;124;03m :type preserve_line: bool\u001b[39;00m\n\u001b[1;32m 141\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 142\u001b[0m sentences \u001b[38;5;241m=\u001b[39m [text] \u001b[38;5;28;01mif\u001b[39;00m preserve_line \u001b[38;5;28;01melse\u001b[39;00m sent_tokenize(text, language)\n\u001b[1;32m 143\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [\n\u001b[1;32m 144\u001b[0m token \u001b[38;5;28;01mfor\u001b[39;00m sent \u001b[38;5;129;01min\u001b[39;00m sentences \u001b[38;5;28;01mfor\u001b[39;00m token \u001b[38;5;129;01min\u001b[39;00m _treebank_word_tokenizer\u001b[38;5;241m.\u001b[39mtokenize(sent)\n\u001b[1;32m 145\u001b[0m ]\n", + "File \u001b[0;32m/opt/anaconda3/lib/python3.12/site-packages/nltk/tokenize/__init__.py:119\u001b[0m, in \u001b[0;36msent_tokenize\u001b[0;34m(text, language)\u001b[0m\n\u001b[1;32m 109\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21msent_tokenize\u001b[39m(text, language\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124menglish\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 110\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 111\u001b[0m \u001b[38;5;124;03m Return a sentence-tokenized copy of *text*,\u001b[39;00m\n\u001b[1;32m 112\u001b[0m \u001b[38;5;124;03m using NLTK's recommended sentence tokenizer\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 117\u001b[0m \u001b[38;5;124;03m :param language: the model name in the Punkt corpus\u001b[39;00m\n\u001b[1;32m 118\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 119\u001b[0m tokenizer \u001b[38;5;241m=\u001b[39m _get_punkt_tokenizer(language)\n\u001b[1;32m 120\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m tokenizer\u001b[38;5;241m.\u001b[39mtokenize(text)\n", + "File \u001b[0;32m/opt/anaconda3/lib/python3.12/site-packages/nltk/tokenize/__init__.py:105\u001b[0m, in \u001b[0;36m_get_punkt_tokenizer\u001b[0;34m(language)\u001b[0m\n\u001b[1;32m 96\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mlru_cache\n\u001b[1;32m 97\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_get_punkt_tokenizer\u001b[39m(language\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124menglish\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 98\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 99\u001b[0m \u001b[38;5;124;03m A constructor for the PunktTokenizer that utilizes\u001b[39;00m\n\u001b[1;32m 100\u001b[0m \u001b[38;5;124;03m a lru cache for performance.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 103\u001b[0m \u001b[38;5;124;03m :type language: str\u001b[39;00m\n\u001b[1;32m 104\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 105\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m PunktTokenizer(language)\n", + "File \u001b[0;32m/opt/anaconda3/lib/python3.12/site-packages/nltk/tokenize/punkt.py:1744\u001b[0m, in \u001b[0;36mPunktTokenizer.__init__\u001b[0;34m(self, lang)\u001b[0m\n\u001b[1;32m 1742\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, lang\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124menglish\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 1743\u001b[0m PunktSentenceTokenizer\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m)\n\u001b[0;32m-> 1744\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mload_lang(lang)\n", + "File \u001b[0;32m/opt/anaconda3/lib/python3.12/site-packages/nltk/tokenize/punkt.py:1749\u001b[0m, in \u001b[0;36mPunktTokenizer.load_lang\u001b[0;34m(self, lang)\u001b[0m\n\u001b[1;32m 1746\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mload_lang\u001b[39m(\u001b[38;5;28mself\u001b[39m, lang\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124menglish\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 1747\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mnltk\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdata\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m find\n\u001b[0;32m-> 1749\u001b[0m lang_dir \u001b[38;5;241m=\u001b[39m find(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtokenizers/punkt_tab/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mlang\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 1750\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_params \u001b[38;5;241m=\u001b[39m load_punkt_params(lang_dir)\n\u001b[1;32m 1751\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lang \u001b[38;5;241m=\u001b[39m lang\n", + "File \u001b[0;32m/opt/anaconda3/lib/python3.12/site-packages/nltk/data.py:579\u001b[0m, in \u001b[0;36mfind\u001b[0;34m(resource_name, paths)\u001b[0m\n\u001b[1;32m 577\u001b[0m sep \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m*\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m*\u001b[39m \u001b[38;5;241m70\u001b[39m\n\u001b[1;32m 578\u001b[0m resource_not_found \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00msep\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mmsg\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00msep\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m--> 579\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mLookupError\u001b[39;00m(resource_not_found)\n", + "\u001b[0;31mLookupError\u001b[0m: \n**********************************************************************\n Resource \u001b[93mpunkt_tab\u001b[0m not found.\n Please use the NLTK Downloader to obtain the resource:\n\n \u001b[31m>>> import nltk\n >>> nltk.download('punkt_tab')\n \u001b[0m\n For more information see: https://www.nltk.org/data.html\n\n Attempted to load \u001b[93mtokenizers/punkt_tab/english/\u001b[0m\n\n Searched in:\n - '/Users/jaeeunb/nltk_data'\n - '/opt/anaconda3/nltk_data'\n - '/opt/anaconda3/share/nltk_data'\n - '/opt/anaconda3/lib/nltk_data'\n - '/usr/share/nltk_data'\n - '/usr/local/share/nltk_data'\n - '/usr/lib/nltk_data'\n - '/usr/local/lib/nltk_data'\n**********************************************************************\n" + ] + } + ], + "source": [ + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "\n", + "tfidf_vect = TfidfVectorizer(tokenizer=LemNormalize, stop_words='english' , \\\n", + " ngram_range=(1,2), min_df=0.05, max_df=0.85 )\n", + "\n", + "feature_vect = tfidf_vect.fit_transform(document_df['opinion_text'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5ef2e7f0-fa24-4b9e-a112-e563a04264af", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.cluster import KMeans\n", + "\n", + "km_cluster = KMeans(n_clusters=5, max_iter=10000, random_state=0)\n", + "km_cluster.fit(feature_vect)\n", + "cluster_label = km_cluster.labels_\n", + "cluster_centers = km_cluster.cluster_centers_" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c9a47014-9dd1-4b65-a25e-ec8346e7e351", + "metadata": {}, + "outputs": [], + "source": [ + "document_df['cluster_label'] = cluster_label\n", + "document_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "990069e8-f240-4597-a360-e4be8e3a431c", + "metadata": {}, + "outputs": [], + "source": [ + "document_df[document_df['cluster_label']==0].sort_values(by='filename')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "60c76c66-cbde-44b1-a940-9a7c2808629a", + "metadata": {}, + "outputs": [], + "source": [ + "document_df[document_df['cluster_label']==1].sort_values(by='filename')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ca3a22af-3aea-4fdc-98fc-0320ea6d7247", + "metadata": {}, + "outputs": [], + "source": [ + "document_df[document_df['cluster_label']==2].sort_values(by='filename')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4e672f79-7627-4e49-9ce2-0030523dcad5", + "metadata": {}, + "outputs": [], + "source": [ + "document_df[document_df['cluster_label']==3].sort_values(by='filename')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c134eb34-84ed-4307-a187-598487591517", + "metadata": {}, + "outputs": [], + "source": [ + "document_df[document_df['cluster_label']==4].sort_values(by='filename')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5c360f8b-c32e-4a5d-8575-bf5bdf3172c9", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.cluster import KMeans\n", + "\n", + "km_cluster = KMeans(n_clusters=3, max_iter=10000, random_state=0)\n", + "km_cluster.fit(feature_vect)\n", + "cluster_label = km_cluster.labels_\n", + "\n", + "\n", + "document_df['cluster_label'] = cluster_label\n", + "document_df.sort_values(by='cluster_label')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "adf7dcf6-377c-4473-ae04-9a2750cd261a", + "metadata": {}, + "outputs": [], + "source": [ + "cluster_centers = km_cluster.cluster_centers_\n", + "print('cluster_centers shape :',cluster_centers.shape)\n", + "print(cluster_centers)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "57498038-d4ff-49fe-9d1f-14136377ee2d", + "metadata": {}, + "outputs": [], + "source": [ + "def get_cluster_details(cluster_model, cluster_data, feature_names, clusters_num, top_n_features=10):\n", + " cluster_details = {}\n", + " \n", + " centroid_feature_ordered_ind = cluster_model.cluster_centers_.argsort()[:,::-1]\n", + " \n", + " for cluster_num in range(clusters_num):\n", + " cluster_details[cluster_num] = {}\n", + " cluster_details[cluster_num]['cluster'] = cluster_num\n", + " \n", + " top_feature_indexes = centroid_feature_ordered_ind[cluster_num, :top_n_features]\n", + " top_features = [ feature_names[ind] for ind in top_feature_indexes ]\n", + " \n", + " top_feature_values = cluster_model.cluster_centers_[cluster_num, top_feature_indexes].tolist()\n", + " \n", + " cluster_details[cluster_num]['top_features'] = top_features\n", + " cluster_details[cluster_num]['top_features_value'] = top_feature_values\n", + " filenames = cluster_data[cluster_data['cluster_label'] == cluster_num]['filename']\n", + " filenames = filenames.values.tolist()\n", + " cluster_details[cluster_num]['filenames'] = filenames\n", + " \n", + " return cluster_details" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d9ac3591-c4fa-4a32-a999-930018f03ef3", + "metadata": {}, + "outputs": [], + "source": [ + "def print_cluster_details(cluster_details):\n", + " for cluster_num, cluster_detail in cluster_details.items():\n", + " print('####### Cluster {0}'.format(cluster_num))\n", + " print('Top features:', cluster_detail['top_features'])\n", + " print('Reviews 파일명 :',cluster_detail['filenames'][:7])\n", + " print('==================================================')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3d5a8305-7841-42b4-9fb2-a92ecbb5af9e", + "metadata": {}, + "outputs": [], + "source": [ + "feature_names = tfidf_vect.get_feature_names()\n", + "\n", + "cluster_details = get_cluster_details(cluster_model=km_cluster, cluster_data=document_df,\\\n", + " feature_names=feature_names, clusters_num=3, top_n_features=10 )\n", + "print_cluster_details(cluster_details)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0bd18b4a-6609-4558-a890-ccd3b5cc5d8e", + "metadata": {}, + "outputs": [], + "source": [ + "import sklearn\n", + "print(sklearn.__version__)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fe272678-cb60-445f-ae8f-26952cdbf463", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "def cos_similarity(v1, v2):\n", + " dot_product = np.dot(v1, v2)\n", + " l2_norm = (np.sqrt(sum(np.square(v1))) * np.sqrt(sum(np.square(v2))))\n", + " similarity = dot_product / l2_norm \n", + " \n", + " return similarity" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "172decc7-b960-48ca-a39e-c4337b00f81e", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "\n", + "doc_list = ['if you take the blue pill, the story ends' ,\n", + " 'if you take the red pill, you stay in Wonderland',\n", + " 'if you take the red pill, I show you how deep the rabbit hole goes']\n", + "\n", + "tfidf_vect_simple = TfidfVectorizer()\n", + "feature_vect_simple = tfidf_vect_simple.fit_transform(doc_list)\n", + "print(feature_vect_simple.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d6d574fd-bdc0-4ad5-b138-27c65249cd08", + "metadata": {}, + "outputs": [], + "source": [ + "feature_vect_dense = feature_vect_simple.todense()\n", + "\n", + "vect1 = np.array(feature_vect_dense[0]).reshape(-1,)\n", + "vect2 = np.array(feature_vect_dense[1]).reshape(-1,)\n", + "\n", + "similarity_simple = cos_similarity(vect1, vect2 )\n", + "print('문장 1, 문장 2 Cosine 유사도: {0:.3f}'.format(similarity_simple))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2af88a52-4057-441f-bd2f-4185234291fd", + "metadata": {}, + "outputs": [], + "source": [ + "vect1 = np.array(feature_vect_dense[0]).reshape(-1,)\n", + "vect3 = np.array(feature_vect_dense[2]).reshape(-1,)\n", + "similarity_simple = cos_similarity(vect1, vect3 )\n", + "print('문장 1, 문장 3 Cosine 유사도: {0:.3f}'.format(similarity_simple))\n", + "\n", + "vect2 = np.array(feature_vect_dense[1]).reshape(-1,)\n", + "vect3 = np.array(feature_vect_dense[2]).reshape(-1,)\n", + "similarity_simple = cos_similarity(vect2, vect3 )\n", + "print('문장 2, 문장 3 Cosine 유사도: {0:.3f}'.format(similarity_simple))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ba7787be-da21-4302-bde4-7620666ce5f7", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.metrics.pairwise import cosine_similarity\n", + "\n", + "similarity_simple_pair = cosine_similarity(feature_vect_simple[0] , feature_vect_simple)\n", + "print(similarity_simple_pair)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7079fe64-55d4-4d6f-b0e6-5d9636e52e37", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.metrics.pairwise import cosine_similarity\n", + "\n", + "similarity_simple_pair = cosine_similarity(feature_vect_simple[0] , feature_vect_simple[1:])\n", + "print(similarity_simple_pair)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "efbe9da6-81e4-4a54-9f35-26a71cd19c95", + "metadata": {}, + "outputs": [], + "source": [ + "similarity_simple_pair = cosine_similarity(feature_vect_simple , feature_vect_simple)\n", + "print(similarity_simple_pair)\n", + "print('shape:',similarity_simple_pair.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "192bb738-a17a-422f-8c0e-9c3be9d63e98", + "metadata": {}, + "outputs": [], + "source": [ + "from nltk.stem import WordNetLemmatizer\n", + "import nltk\n", + "import string\n", + "\n", + "remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)\n", + "lemmar = WordNetLemmatizer()\n", + "\n", + "def LemTokens(tokens):\n", + " return [lemmar.lemmatize(token) for token in tokens]\n", + "\n", + "def LemNormalize(text):\n", + " return LemTokens(nltk.word_tokenize(text.lower().translate(remove_punct_dict)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "250658a2-e130-4882-ad95-9d4f0c0d3e5c", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import glob, os\n", + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "from sklearn.cluster import KMeans\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "\n", + "path = r'OpinosisDataset1.0\\topics'\n", + "all_files = glob.glob(os.path.join(path, \"*.data\")) \n", + "filename_list = []\n", + "opinion_text = []\n", + "\n", + "for file_ in all_files:\n", + " df = pd.read_table(file_,index_col=None, header=0,encoding='latin1')\n", + " filename_ = file_.split('\\\\')[-1]\n", + " filename = filename_.split('.')[0]\n", + " filename_list.append(filename)\n", + " opinion_text.append(df.to_string())\n", + "\n", + "document_df = pd.DataFrame({'filename':filename_list, 'opinion_text':opinion_text})\n", + "\n", + "tfidf_vect = TfidfVectorizer(tokenizer=LemNormalize, stop_words='english' , \\\n", + " ngram_range=(1,2), min_df=0.05, max_df=0.85 )\n", + "feature_vect = tfidf_vect.fit_transform(document_df['opinion_text'])\n", + "\n", + "km_cluster = KMeans(n_clusters=3, max_iter=10000, random_state=0)\n", + "km_cluster.fit(feature_vect)\n", + "cluster_label = km_cluster.labels_\n", + "cluster_centers = km_cluster.cluster_centers_\n", + "document_df['cluster_label'] = cluster_label" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f1929750-ba07-41e7-835c-20698a303eee", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.metrics.pairwise import cosine_similarity\n", + "\n", + "hotel_indexes = document_df[document_df['cluster_label']==2].index\n", + "print('호텔로 클러스터링 된 문서들의 DataFrame Index:', hotel_indexes)\n", + "\n", + "comparison_docname = document_df.iloc[hotel_indexes[0]]['filename']\n", + "print('##### 비교 기준 문서명 ',comparison_docname,' 와 타 문서 유사도######')\n", + "\n", + "''' document_df에서 추출한 Index 객체를 feature_vect로 입력하여 호텔 클러스터링된 feature_vect 추출 \n", + "이를 이용하여 호텔로 클러스터링된 문서 중 첫번째 문서와 다른 문서간의 코사인 유사도 측정.'''\n", + "similarity_pair = cosine_similarity(feature_vect[hotel_indexes[0]] , feature_vect[hotel_indexes])\n", + "print(similarity_pair)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8a186d73-7ae7-4148-8583-68eda05793a3", + "metadata": {}, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "\n", + "sorted_index = similarity_pair.argsort()[:,::-1]\n", + "sorted_index = sorted_index[:, 1:]\n", + "\n", + "hotel_sorted_indexes = hotel_indexes[sorted_index.reshape(-1)]\n", + "\n", + "hotel_1_sim_value = np.sort(similarity_pair.reshape(-1))[::-1]\n", + "hotel_1_sim_value = hotel_1_sim_value[1:]\n", + "\n", + "hotel_1_sim_df = pd.DataFrame()\n", + "hotel_1_sim_df['filename'] = document_df.iloc[hotel_sorted_indexes]['filename']\n", + "hotel_1_sim_df['similarity'] = hotel_1_sim_value\n", + "\n", + "fig1 = plt.gcf()\n", + "sns.barplot(x='similarity', y='filename',data=hotel_1_sim_df)\n", + "plt.title(comparison_docname)\n", + "fig1.savefig('p553_hotel.tif', format='tif', dpi=300, bbox_inches='tight')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8f8d35b0-b2a5-4c22-ae9f-779509dabb2d", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "train_df = pd.read_csv('ratings_train.txt', sep='\\t')\n", + "train_df.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "424129c4-526d-404e-8c43-5e1716c68a69", + "metadata": {}, + "outputs": [], + "source": [ + "train_df['label'].value_counts( )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "37262986-9b43-4946-be84-f9f29880c846", + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "\n", + "train_df = train_df.fillna(' ')\n", + "train_df['document'] = train_df['document'].apply( lambda x : re.sub(r\"\\d+\", \" \", x) )\n", + "\n", + "test_df = pd.read_csv('ratings_test.txt', sep='\\t')\n", + "test_df = test_df.fillna(' ')\n", + "test_df['document'] = test_df['document'].apply( lambda x : re.sub(r\"\\d+\", \" \", x) )\n", + "\n", + "# id 칼럼 삭제 수행\n", + "train_df.drop('id', axis=1, inplace=True) \n", + "test_df.drop('id', axis=1, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "926a11f4-bcda-4809-9da9-75afbdfe9403", + "metadata": {}, + "outputs": [], + "source": [ + "from konlpy.tag import Twitter\n", + "\n", + "twitter = Twitter()\n", + "def tw_tokenizer(text):\n", + " tokens_ko = twitter.morphs(text)\n", + " return tokens_ko" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "497c9b3e-561c-4731-b150-fe4da90247ca", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.model_selection import GridSearchCV\n", + "\n", + "tfidf_vect = TfidfVectorizer(tokenizer=tw_tokenizer, ngram_range=(1,2), min_df=3, max_df=0.9)\n", + "tfidf_vect.fit(train_df['document'])\n", + "tfidf_matrix_train = tfidf_vect.transform(train_df['document'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "401df019-846e-48f9-82a5-37d2b4cc4a5f", + "metadata": {}, + "outputs": [], + "source": [ + "lg_clf = LogisticRegression(random_state=0, solver='liblinear')\n", + "\n", + "params = { 'C': [1 ,3.5, 4.5, 5.5, 10 ] }\n", + "grid_cv = GridSearchCV(lg_clf , param_grid=params , cv=3 ,scoring='accuracy', verbose=1 )\n", + "grid_cv.fit(tfidf_matrix_train , train_df['label'] )\n", + "print(grid_cv.best_params_ , round(grid_cv.best_score_,4))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c3f987e7-021f-40ce-8487-551c83faa108", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.metrics import accuracy_score\n", + "\n", + "tfidf_matrix_test = tfidf_vect.transform(test_df['document'])\n", + "\n", + "best_estimator = grid_cv.best_estimator_\n", + "preds = best_estimator.predict(tfidf_matrix_test)\n", + "\n", + "print('Logistic Regression 정확도: ',accuracy_score(test_df['label'],preds))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:base] *", + "language": "python", + "name": "conda-base-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git "a/Week13_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\242\341\206\250\341\204\214\341\205\242\341\204\213\341\205\263\341\206\253.pdf" "b/Week13_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\242\341\206\250\341\204\214\341\205\242\341\204\213\341\205\263\341\206\253.pdf" new file mode 100644 index 0000000..e8306e8 Binary files /dev/null and "b/Week13_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\242\341\206\250\341\204\214\341\205\242\341\204\213\341\205\263\341\206\253.pdf" differ