From 5f1497ce6b38a9e0a7ca08e2d6db76618e1669ea Mon Sep 17 00:00:00 2001
From: benjas <909336740@qq.com>
Date: Sun, 14 Feb 2021 21:37:37 +0800
Subject: [PATCH] Add. The visualization display
---
.../酒店推荐-checkpoint.ipynb | 2742 ++++++++++++++++-
.../酒店推荐.ipynb | 396 ++-
2 files changed, 3120 insertions(+), 18 deletions(-)
diff --git a/机器学习竞赛实战_优胜解决方案/基于相似度的酒店推荐系统/.ipynb_checkpoints/酒店推荐-checkpoint.ipynb b/机器学习竞赛实战_优胜解决方案/基于相似度的酒店推荐系统/.ipynb_checkpoints/酒店推荐-checkpoint.ipynb
index 2fd6442..4c5ff63 100644
--- a/机器学习竞赛实战_优胜解决方案/基于相似度的酒店推荐系统/.ipynb_checkpoints/酒店推荐-checkpoint.ipynb
+++ b/机器学习竞赛实战_优胜解决方案/基于相似度的酒店推荐系统/.ipynb_checkpoints/酒店推荐-checkpoint.ipynb
@@ -1,6 +1,2744 @@
{
- "cells": [],
- "metadata": {},
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 背景描述\n",
+ "当一个新用户进来时,系统不知道推荐什么,可以从用户看什么来进行相关性的推荐,比如靠近交通、景区等,又或者是含早餐、有电梯等特殊的,这里怎么基于不同酒店的相似度来进行推荐的。\n",
+ "\n",
+ "#### 基于酒店的文本描述来推荐相似酒店"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ " \n",
+ " "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "from nltk.corpus import stopwords\n",
+ "from sklearn.metrics.pairwise import linear_kernel\n",
+ "from sklearn.feature_extraction.text import CountVectorizer\n",
+ "from sklearn.feature_extraction.text import TfidfVectorizer\n",
+ "import re\n",
+ "import random\n",
+ "import cufflinks # pip install cufflinks\n",
+ "import matplotlib.pyplot as plt\n",
+ "from plotly.offline import iplot\n",
+ "cufflinks.go_offline()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " name | \n",
+ " address | \n",
+ " desc | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " Hilton Garden Seattle Downtown | \n",
+ " 1821 Boren Avenue, Seattle Washington 98101 USA | \n",
+ " Located on the southern tip of Lake Union, the... | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " Sheraton Grand Seattle | \n",
+ " 1400 6th Avenue, Seattle, Washington 98101 USA | \n",
+ " Located in the city's vibrant core, the Sherat... | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " Crowne Plaza Seattle Downtown | \n",
+ " 1113 6th Ave, Seattle, WA 98101 | \n",
+ " Located in the heart of downtown Seattle, the ... | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " Kimpton Hotel Monaco Seattle | \n",
+ " 1101 4th Ave, Seattle, WA98101 | \n",
+ " What?s near our hotel downtown Seattle locatio... | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " The Westin Seattle | \n",
+ " 1900 5th Avenue, Seattle, Washington 98101 USA | \n",
+ " Situated amid incredible shopping and iconic a... | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " name \\\n",
+ "0 Hilton Garden Seattle Downtown \n",
+ "1 Sheraton Grand Seattle \n",
+ "2 Crowne Plaza Seattle Downtown \n",
+ "3 Kimpton Hotel Monaco Seattle \n",
+ "4 The Westin Seattle \n",
+ "\n",
+ " address \\\n",
+ "0 1821 Boren Avenue, Seattle Washington 98101 USA \n",
+ "1 1400 6th Avenue, Seattle, Washington 98101 USA \n",
+ "2 1113 6th Ave, Seattle, WA 98101 \n",
+ "3 1101 4th Ave, Seattle, WA98101 \n",
+ "4 1900 5th Avenue, Seattle, Washington 98101 USA \n",
+ "\n",
+ " desc \n",
+ "0 Located on the southern tip of Lake Union, the... \n",
+ "1 Located in the city's vibrant core, the Sherat... \n",
+ "2 Located in the heart of downtown Seattle, the ... \n",
+ "3 What?s near our hotel downtown Seattle locatio... \n",
+ "4 Situated amid incredible shopping and iconic a... "
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df = pd.read_csv(\"data/Seattle_Hotels.csv\", encoding=\"latin-1\") # 西雅图酒店推荐数据\n",
+ "df.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "上面分别是酒店名字、地址及描述"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(152, 3)"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "\"Located on the southern tip of Lake Union, the Hilton Garden Inn Seattle Downtown hotel is perfectly located for business and leisure. \\nThe neighborhood is home to numerous major international companies including Amazon, Google and the Bill & Melinda Gates Foundation. A wealth of eclectic restaurants and bars make this area of Seattle one of the most sought out by locals and visitors. Our proximity to Lake Union allows visitors to take in some of the Pacific Northwest's majestic scenery and enjoy outdoor activities like kayaking and sailing. over 2,000 sq. ft. of versatile space and a complimentary business center. State-of-the-art A/V technology and our helpful staff will guarantee your conference, cocktail reception or wedding is a success. Refresh in the sparkling saltwater pool, or energize with the latest equipment in the 24-hour fitness center. Tastefully decorated and flooded with natural light, our guest rooms and suites offer everything you need to relax and stay productive. Unwind in the bar, and enjoy American cuisine for breakfast, lunch and dinner in our restaurant. The 24-hour Pavilion Pantry? stocks a variety of snacks, drinks and sundries.\""
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df['desc'][0] # 查看酒店描述的个例"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 文本词频统计\n",
+ "统计下酒店介绍文本里大多数描述的信息有哪些"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "vec = CountVectorizer().fit(df['desc']) # 寄存器\n",
+ "bag_of_words = vec.transform(df['desc']) # 将文本转数值"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[0, 1, 0, ..., 0, 0, 0],\n",
+ " [0, 0, 0, ..., 0, 0, 0],\n",
+ " [0, 0, 0, ..., 0, 0, 0],\n",
+ " ...,\n",
+ " [0, 0, 0, ..., 0, 0, 0],\n",
+ " [0, 0, 0, ..., 0, 0, 0],\n",
+ " [0, 0, 0, ..., 1, 0, 0]], dtype=int64)"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "bag_of_words.toarray()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(152, 3200)"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "bag_of_words.shape # 一共152含对应上面的数据,其中有3200个不同的词"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "matrix([[ 1, 11, 11, ..., 2, 6, 2]], dtype=int64)"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "sum_words = bag_of_words.sum(axis=0) # 计算每个词重复的次数\n",
+ "sum_words"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[('located', 108),\n",
+ " ('on', 129),\n",
+ " ('the', 1258),\n",
+ " ('southern', 1),\n",
+ " ('tip', 1),\n",
+ " ('of', 536),\n",
+ " ('lake', 41),\n",
+ " ('union', 33),\n",
+ " ('hilton', 12),\n",
+ " ('garden', 11),\n",
+ " ('inn', 89),\n",
+ " ('seattle', 533),\n",
+ " ('downtown', 133),\n",
+ " ('hotel', 295),\n",
+ " ('is', 271),\n",
+ " ('perfectly', 6),\n",
+ " ('for', 216),\n",
+ " ('business', 87),\n",
+ " ('and', 1062),\n",
+ " ('leisure', 18),\n",
+ " ('neighborhood', 35),\n",
+ " ('home', 57),\n",
+ " ('to', 471),\n",
+ " ('numerous', 1),\n",
+ " ('major', 12),\n",
+ " ('international', 32),\n",
+ " ('companies', 6),\n",
+ " ('including', 47),\n",
+ " ('amazon', 19),\n",
+ " ('google', 6),\n",
+ " ('bill', 4),\n",
+ " ('melinda', 4),\n",
+ " ('gates', 5),\n",
+ " ('foundation', 4),\n",
+ " ('wealth', 1),\n",
+ " ('eclectic', 8),\n",
+ " ('restaurants', 35),\n",
+ " ('bars', 7),\n",
+ " ('make', 43),\n",
+ " ('this', 63),\n",
+ " ('area', 51),\n",
+ " ('one', 75),\n",
+ " ('most', 40),\n",
+ " ('sought', 1),\n",
+ " ('out', 23),\n",
+ " ('by', 71),\n",
+ " ('locals', 5),\n",
+ " ('visitors', 4),\n",
+ " ('our', 359),\n",
+ " ('proximity', 8),\n",
+ " ('allows', 3),\n",
+ " ('take', 31),\n",
+ " ('in', 449),\n",
+ " ('some', 22),\n",
+ " ('pacific', 42),\n",
+ " ('northwest', 42),\n",
+ " ('majestic', 4),\n",
+ " ('scenery', 2),\n",
+ " ('enjoy', 93),\n",
+ " ('outdoor', 23),\n",
+ " ('activities', 8),\n",
+ " ('like', 46),\n",
+ " ('kayaking', 3),\n",
+ " ('sailing', 1),\n",
+ " ('over', 14),\n",
+ " ('000', 11),\n",
+ " ('sq', 4),\n",
+ " ('ft', 4),\n",
+ " ('versatile', 3),\n",
+ " ('space', 97),\n",
+ " ('complimentary', 62),\n",
+ " ('center', 151),\n",
+ " ('state', 30),\n",
+ " ('art', 44),\n",
+ " ('technology', 4),\n",
+ " ('helpful', 2),\n",
+ " ('staff', 9),\n",
+ " ('will', 46),\n",
+ " ('guarantee', 3),\n",
+ " ('your', 186),\n",
+ " ('conference', 6),\n",
+ " ('cocktail', 6),\n",
+ " ('reception', 7),\n",
+ " ('or', 161),\n",
+ " ('wedding', 4),\n",
+ " ('success', 4),\n",
+ " ('refresh', 4),\n",
+ " ('sparkling', 2),\n",
+ " ('saltwater', 1),\n",
+ " ('pool', 37),\n",
+ " ('energize', 2),\n",
+ " ('with', 280),\n",
+ " ('latest', 4),\n",
+ " ('equipment', 3),\n",
+ " ('24', 42),\n",
+ " ('hour', 32),\n",
+ " ('fitness', 42),\n",
+ " ('tastefully', 4),\n",
+ " ('decorated', 4),\n",
+ " ('flooded', 1),\n",
+ " ('natural', 8),\n",
+ " ('light', 26),\n",
+ " ('guest', 57),\n",
+ " ('rooms', 106),\n",
+ " ('suites', 67),\n",
+ " ('offer', 59),\n",
+ " ('everything', 18),\n",
+ " ('you', 304),\n",
+ " ('need', 25),\n",
+ " ('relax', 25),\n",
+ " ('stay', 105),\n",
+ " ('productive', 4),\n",
+ " ('unwind', 11),\n",
+ " ('bar', 34),\n",
+ " ('american', 5),\n",
+ " ('cuisine', 11),\n",
+ " ('breakfast', 68),\n",
+ " ('lunch', 4),\n",
+ " ('dinner', 7),\n",
+ " ('restaurant', 32),\n",
+ " ('pavilion', 1),\n",
+ " ('pantry', 2),\n",
+ " ('stocks', 1),\n",
+ " ('variety', 12),\n",
+ " ('snacks', 9),\n",
+ " ('drinks', 6),\n",
+ " ('sundries', 2),\n",
+ " ('city', 79),\n",
+ " ('vibrant', 14),\n",
+ " ('core', 5),\n",
+ " ('sheraton', 8),\n",
+ " ('grand', 13),\n",
+ " ('provides', 9),\n",
+ " ('gateway', 4),\n",
+ " ('diverse', 5),\n",
+ " ('sights', 2),\n",
+ " ('sounds', 2),\n",
+ " ('step', 11),\n",
+ " ('front', 11),\n",
+ " ('doors', 8),\n",
+ " ('find', 31),\n",
+ " ('gourmet', 1),\n",
+ " ('dining', 36),\n",
+ " ('world', 24),\n",
+ " ('class', 13),\n",
+ " ('shopping', 31),\n",
+ " ('exciting', 7),\n",
+ " ('entertainment', 11),\n",
+ " ('iconic', 15),\n",
+ " ('local', 45),\n",
+ " ('attractions', 59),\n",
+ " ('pike', 90),\n",
+ " ('place', 102),\n",
+ " ('market', 97),\n",
+ " ('needle', 68),\n",
+ " ('chihuly', 3),\n",
+ " ('glass', 10),\n",
+ " ('museum', 43),\n",
+ " ('as', 117),\n",
+ " ('only', 34),\n",
+ " ('seven', 6),\n",
+ " ('hotels', 28),\n",
+ " ('north', 14),\n",
+ " ('america', 5),\n",
+ " ('earn', 3),\n",
+ " ('esteemed', 1),\n",
+ " ('designation', 1),\n",
+ " ('guests', 54),\n",
+ " ('can', 55),\n",
+ " ('book', 11),\n",
+ " ('confidently', 1),\n",
+ " ('knowing', 1),\n",
+ " ('they', 11),\n",
+ " ('re', 64),\n",
+ " ('receiving', 1),\n",
+ " ('highest', 2),\n",
+ " ('benchmark', 1),\n",
+ " ('product', 1),\n",
+ " ('service', 53),\n",
+ " ('offerings', 2),\n",
+ " ('available', 36),\n",
+ " ('experience', 52),\n",
+ " ('recently', 7),\n",
+ " ('completed', 1),\n",
+ " ('multimillion', 1),\n",
+ " ('dollar', 1),\n",
+ " ('transformation', 1),\n",
+ " ('featuring', 26),\n",
+ " ('all', 100),\n",
+ " ('new', 17),\n",
+ " ('an', 91),\n",
+ " ('expanded', 5),\n",
+ " ('club', 17),\n",
+ " ('lounge', 20),\n",
+ " ('modern', 34),\n",
+ " ('meeting', 27),\n",
+ " ('event', 29),\n",
+ " ('spaces', 11),\n",
+ " ('gather', 1),\n",
+ " ('stylish', 17),\n",
+ " ('lobby', 26),\n",
+ " ('private', 29),\n",
+ " ('collection', 6),\n",
+ " ('artists', 2),\n",
+ " ('while', 34),\n",
+ " ('enjoying', 5),\n",
+ " ('favorite', 7),\n",
+ " ('beverage', 5),\n",
+ " ('from', 224),\n",
+ " ('starbucks', 12),\n",
+ " ('features', 27),\n",
+ " ('several', 5),\n",
+ " ('options', 14),\n",
+ " ('loulay', 1),\n",
+ " ('kitchen', 17),\n",
+ " ('james', 1),\n",
+ " ('beard', 1),\n",
+ " ('award', 13),\n",
+ " ('winning', 11),\n",
+ " ('chef', 3),\n",
+ " ('thierry', 1),\n",
+ " ('rautureau', 1),\n",
+ " ('heart', 35),\n",
+ " ('crowne', 5),\n",
+ " ('plaza', 4),\n",
+ " ('offers', 43),\n",
+ " ('exceptional', 5),\n",
+ " ('blend', 3),\n",
+ " ('style', 27),\n",
+ " ('comfort', 24),\n",
+ " ('ll', 48),\n",
+ " ('notice', 1),\n",
+ " ('cool', 5),\n",
+ " ('comfortable', 30),\n",
+ " ('unconventional', 1),\n",
+ " ('touches', 4),\n",
+ " ('that', 65),\n",
+ " ('set', 4),\n",
+ " ('us', 21),\n",
+ " ('apart', 1),\n",
+ " ('soon', 3),\n",
+ " ('inside', 7),\n",
+ " ('marvel', 2),\n",
+ " ('at', 231),\n",
+ " ('stunning', 7),\n",
+ " ('views', 39),\n",
+ " ('lights', 4),\n",
+ " ('relaxing', 12),\n",
+ " ('sleep', 6),\n",
+ " ('advantage', 12),\n",
+ " ('beds', 17),\n",
+ " ('wireless', 9),\n",
+ " ('internet', 26),\n",
+ " ('throughout', 7),\n",
+ " ('amenities', 60),\n",
+ " ('help', 11),\n",
+ " ('temple', 1),\n",
+ " ('spa', 13),\n",
+ " ('tight', 1),\n",
+ " ('amenity', 1),\n",
+ " ('kits', 1),\n",
+ " ('lavender', 1),\n",
+ " ('spray', 1),\n",
+ " ('lotions', 1),\n",
+ " ('rejuvenate', 1),\n",
+ " ('invigorating', 2),\n",
+ " ('workout', 7),\n",
+ " ('get', 11),\n",
+ " ('suggestions', 1),\n",
+ " ('expert', 2),\n",
+ " ('concierge', 3),\n",
+ " ('savor', 6),\n",
+ " ('sumptuous', 1),\n",
+ " ('regatta', 1),\n",
+ " ('grille', 1),\n",
+ " ('where', 27),\n",
+ " ('happy', 6),\n",
+ " ('daily', 10),\n",
+ " ('4pm', 1),\n",
+ " ('7pm', 1),\n",
+ " ('monthly', 1),\n",
+ " ('drink', 5),\n",
+ " ('specials', 2),\n",
+ " ('come', 17),\n",
+ " ('emerald', 17),\n",
+ " ('has', 41),\n",
+ " ('what', 11),\n",
+ " ('near', 48),\n",
+ " ('location', 33),\n",
+ " ('better', 5),\n",
+ " ('question', 2),\n",
+ " ('might', 5),\n",
+ " ('be', 43),\n",
+ " ('not', 20),\n",
+ " ('nearby', 16),\n",
+ " ('addition', 4),\n",
+ " ('being', 1),\n",
+ " ('here', 19),\n",
+ " ('just', 82),\n",
+ " ('small', 8),\n",
+ " ('sampling', 2),\n",
+ " ('rest', 4),\n",
+ " ('columbia', 2),\n",
+ " ('whose', 1),\n",
+ " ('sky', 2),\n",
+ " ('view', 11),\n",
+ " ('observatory', 1),\n",
+ " ('73rd', 1),\n",
+ " ('floor', 11),\n",
+ " ('tallest', 1),\n",
+ " ('public', 6),\n",
+ " ('viewing', 1),\n",
+ " ('west', 15),\n",
+ " ('mississippi', 1),\n",
+ " ('historic', 24),\n",
+ " ('5th', 4),\n",
+ " ('avenue', 15),\n",
+ " ('theatre', 2),\n",
+ " ('musical', 1),\n",
+ " ('productions', 1),\n",
+ " ('central', 12),\n",
+ " ('library', 7),\n",
+ " ('architectural', 2),\n",
+ " ('within', 36),\n",
+ " ('half', 5),\n",
+ " ('mile', 14),\n",
+ " ('must', 5),\n",
+ " ('see', 15),\n",
+ " ('which', 14),\n",
+ " ('houses', 5),\n",
+ " ('original', 11),\n",
+ " ('pioneer', 15),\n",
+ " ('square', 28),\n",
+ " ('fantastic', 3),\n",
+ " ('flagship', 1),\n",
+ " ('nordstrom', 6),\n",
+ " ('rack', 1),\n",
+ " ('macy', 1),\n",
+ " ('sportswear', 1),\n",
+ " ('louis', 1),\n",
+ " ('vuitton', 1),\n",
+ " ('arcteryx', 1),\n",
+ " ('oodles', 1),\n",
+ " ('independent', 2),\n",
+ " ('boutiques', 5),\n",
+ " ('great', 39),\n",
+ " ('wheel', 2),\n",
+ " ('washington', 67),\n",
+ " ('convention', 24),\n",
+ " ('about', 11),\n",
+ " ('bell', 2),\n",
+ " ('street', 26),\n",
+ " ('pier', 5),\n",
+ " ('cruise', 11),\n",
+ " ('terminal', 6),\n",
+ " ('66', 1),\n",
+ " ('sports', 13),\n",
+ " ('stadiums', 5),\n",
+ " ('centurylink', 17),\n",
+ " ('field', 34),\n",
+ " ('safeco', 20),\n",
+ " ('seahawks', 10),\n",
+ " ('mariners', 9),\n",
+ " ('sounders', 4),\n",
+ " ('situated', 14),\n",
+ " ('amid', 3),\n",
+ " ('incredible', 3),\n",
+ " ('westin', 1),\n",
+ " ('contemporary', 12),\n",
+ " ('haven', 3),\n",
+ " ('prime', 3),\n",
+ " ('recharge', 2),\n",
+ " ('accommodations', 15),\n",
+ " ('comforts', 14),\n",
+ " ('signature', 14),\n",
+ " ('heavenly', 2),\n",
+ " ('gorgeous', 7),\n",
+ " ('skyline', 8),\n",
+ " ('puget', 16),\n",
+ " ('sound', 21),\n",
+ " ('cascade', 1),\n",
+ " ('mountain', 5),\n",
+ " ('range', 9),\n",
+ " ('newly', 5),\n",
+ " ('renovated', 10),\n",
+ " ('1900', 1),\n",
+ " ('fifth', 2),\n",
+ " ('offering', 21),\n",
+ " ('carefully', 2),\n",
+ " ('curated', 4),\n",
+ " ('wine', 10),\n",
+ " ('crafted', 3),\n",
+ " ('explore', 20),\n",
+ " ('spectacular', 6),\n",
+ " ('celebrated', 3),\n",
+ " ('waterfront', 38),\n",
+ " ('host', 9),\n",
+ " ('unforgettable', 3),\n",
+ " ('meetings', 16),\n",
+ " ('social', 11),\n",
+ " ('engagements', 1),\n",
+ " ('more', 29),\n",
+ " ('than', 19),\n",
+ " ('70', 2),\n",
+ " ('feet', 16),\n",
+ " ('enhanced', 1),\n",
+ " ('planning', 8),\n",
+ " ('custom', 6),\n",
+ " ('catering', 8),\n",
+ " ('mind', 8),\n",
+ " ('body', 1),\n",
+ " ('sleek', 5),\n",
+ " ('westinworkout', 1),\n",
+ " ('studio', 11),\n",
+ " ('designed', 21),\n",
+ " ('reflect', 3),\n",
+ " ('substance', 1),\n",
+ " ('welcoming', 5),\n",
+ " ('best', 50),\n",
+ " ('paramount', 4),\n",
+ " ('summons', 1),\n",
+ " ('feel', 11),\n",
+ " ('cozy', 10),\n",
+ " ('elegant', 5),\n",
+ " ('luxurious', 4),\n",
+ " ('residence', 5),\n",
+ " ('friendly', 29),\n",
+ " ('hosts', 3),\n",
+ " ('asian', 2),\n",
+ " ('right', 15),\n",
+ " ('downstairs', 1),\n",
+ " ('fall', 1),\n",
+ " ('love', 9),\n",
+ " ('simple', 6),\n",
+ " ('luxury', 18),\n",
+ " ('charm', 10),\n",
+ " ('boutique', 8),\n",
+ " ('warm', 8),\n",
+ " ('inviting', 10),\n",
+ " ('wood', 7),\n",
+ " ('finishes', 2),\n",
+ " ('comfy', 4),\n",
+ " ('seating', 7),\n",
+ " ('areas', 12),\n",
+ " ('fireplace', 6),\n",
+ " ('classically', 1),\n",
+ " ('appointed', 9),\n",
+ " ('dash', 1),\n",
+ " ('urban', 15),\n",
+ " ('flair', 1),\n",
+ " ('puts', 5),\n",
+ " ('good', 4),\n",
+ " ('company', 3),\n",
+ " ('block', 10),\n",
+ " ('walking', 21),\n",
+ " ('distance', 23),\n",
+ " ('cafes', 1),\n",
+ " ('there', 15),\n",
+ " ('are', 136),\n",
+ " ('many', 31),\n",
+ " ('reasons', 1),\n",
+ " ('annually', 1),\n",
+ " ('ranked', 1),\n",
+ " ('among', 7),\n",
+ " ('top', 17),\n",
+ " ('five', 12),\n",
+ " ('why', 4),\n",
+ " ('yours', 2),\n",
+ " ('shops', 14),\n",
+ " ('sightseeing', 4),\n",
+ " ('tour', 5),\n",
+ " ('rent', 1),\n",
+ " ('car', 7),\n",
+ " ('if', 19),\n",
+ " ('town', 13),\n",
+ " ('walk', 28),\n",
+ " ('via', 5),\n",
+ " ('underground', 3),\n",
+ " ('concourse', 1),\n",
+ " ('hungry', 1),\n",
+ " ('visit', 21),\n",
+ " ('redtrees', 1),\n",
+ " ('wide', 6),\n",
+ " ('satisfy', 2),\n",
+ " ('any', 12),\n",
+ " ('foodie', 1),\n",
+ " ('destination', 5),\n",
+ " ('steps', 20),\n",
+ " ('everywhere', 3),\n",
+ " ('want', 11),\n",
+ " ('motif', 1),\n",
+ " ('welcome', 20),\n",
+ " ('libation', 1),\n",
+ " ('rooftop', 8),\n",
+ " ('across', 16),\n",
+ " ('touchstones', 1),\n",
+ " ('sweeping', 2),\n",
+ " ('landscape', 3),\n",
+ " ('rich', 8),\n",
+ " ('arts', 7),\n",
+ " ('music', 16),\n",
+ " ('culture', 6),\n",
+ " ('infuse', 1),\n",
+ " ('surroundings', 1),\n",
+ " ('residences', 1),\n",
+ " ('hardwoods', 1),\n",
+ " ('colors', 2),\n",
+ " ('inspired', 12),\n",
+ " ('region', 3),\n",
+ " ('culinary', 5),\n",
+ " ('bounty', 3),\n",
+ " ('reflected', 1),\n",
+ " ('menus', 1),\n",
+ " ('frolik', 1),\n",
+ " ('cocktails', 5),\n",
+ " ('adjoining', 2),\n",
+ " ('patio', 6),\n",
+ " ('join', 6),\n",
+ " ('between', 5),\n",
+ " ('monorail', 5),\n",
+ " ('rail', 19),\n",
+ " ('airport', 99),\n",
+ " ('stroll', 2),\n",
+ " ('away', 59),\n",
+ " ('known', 8),\n",
+ " ('setting', 6),\n",
+ " ('trends', 2),\n",
+ " ('warwick', 5),\n",
+ " ('leading', 4),\n",
+ " ('way', 5),\n",
+ " ('upbeat', 1),\n",
+ " ('belltown', 13),\n",
+ " ('district', 27),\n",
+ " ('blocks', 21),\n",
+ " ('blends', 1),\n",
+ " ('classic', 8),\n",
+ " ('expected', 1),\n",
+ " ('name', 2),\n",
+ " ('styling', 1),\n",
+ " ('boasting', 1),\n",
+ " ('unique', 16),\n",
+ " ('staying', 12),\n",
+ " ('truly', 3),\n",
+ " ('finding', 2),\n",
+ " ('pleasant', 3),\n",
+ " ('surprises', 1),\n",
+ " ('along', 13),\n",
+ " ('refreshing', 4),\n",
+ " ('seaborne', 1),\n",
+ " ('mists', 1),\n",
+ " ('breeze', 3),\n",
+ " ('evergreen', 2),\n",
+ " ('covered', 4),\n",
+ " ('hills', 1),\n",
+ " ('lining', 1),\n",
+ " ('horizon', 2),\n",
+ " ('doorstep', 2),\n",
+ " ('anything', 2),\n",
+ " ('possible', 5),\n",
+ " ('surrounded', 4),\n",
+ " ('snow', 2),\n",
+ " ('capped', 2),\n",
+ " ('peaks', 1),\n",
+ " ('deep', 3),\n",
+ " ('blue', 1),\n",
+ " ('waters', 3),\n",
+ " ('swaths', 1),\n",
+ " ('forests', 1),\n",
+ " ('wild', 2),\n",
+ " ('it', 55),\n",
+ " ('trendy', 4),\n",
+ " ('side', 4),\n",
+ " ('another', 2),\n",
+ " ('elliott', 10),\n",
+ " ('bay', 14),\n",
+ " ('gleaming', 1),\n",
+ " ('wake', 6),\n",
+ " ('fresh', 18),\n",
+ " ('cup', 6),\n",
+ " ('coffee', 38),\n",
+ " ('delivered', 1),\n",
+ " ('straight', 3),\n",
+ " ('room', 77),\n",
+ " ('then', 10),\n",
+ " ('head', 5),\n",
+ " ('neighbourhoods', 1),\n",
+ " ('craft', 5),\n",
+ " ('breweries', 3),\n",
+ " ('spend', 9),\n",
+ " ('day', 39),\n",
+ " ('hiking', 6),\n",
+ " ('up', 44),\n",
+ " ('mount', 3),\n",
+ " ('rainer', 1),\n",
+ " ('nightfall', 1),\n",
+ " ('meet', 12),\n",
+ " ('goldfinch', 1),\n",
+ " ('tavern', 1),\n",
+ " ('ethan', 1),\n",
+ " ('stowell', 1),\n",
+ " ('let', 4),\n",
+ " ('chefs', 2),\n",
+ " ('show', 4),\n",
+ " ('flavours', 1),\n",
+ " ('favourite', 1),\n",
+ " ('soak', 3),\n",
+ " ('scene', 6),\n",
+ " ('living', 22),\n",
+ " ('mix', 2),\n",
+ " ('live', 10),\n",
+ " ('dj', 1),\n",
+ " ('series', 1),\n",
+ " ('before', 3),\n",
+ " ('heading', 3),\n",
+ " ('memorable', 4),\n",
+ " ('trace', 1),\n",
+ " ('seasonal', 10),\n",
+ " ('fare', 4),\n",
+ " ('atmosphere', 7),\n",
+ " ('missed', 1),\n",
+ " ('work', 25),\n",
+ " ('off', 19),\n",
+ " ('next', 20),\n",
+ " ('morning', 18),\n",
+ " ('fit', 7),\n",
+ " ('wandering', 1),\n",
+ " ('always', 7),\n",
+ " ('we', 128),\n",
+ " ('ve', 7),\n",
+ " ('got', 4),\n",
+ " ('during', 9),\n",
+ " ('time', 24),\n",
+ " ('whatever', 2),\n",
+ " ('whenever', 1),\n",
+ " ('wish', 2),\n",
+ " ('command', 1),\n",
+ " ('upscale', 11),\n",
+ " ('getaway', 6),\n",
+ " ('hyatt', 15),\n",
+ " ('theater', 6),\n",
+ " ('four', 9),\n",
+ " ('diamond', 4),\n",
+ " ('landmarks', 6),\n",
+ " ('destinations', 3),\n",
+ " ('scenic', 4),\n",
+ " ('luxuriate', 1),\n",
+ " ('opt', 2),\n",
+ " ('decadent', 1),\n",
+ " ('suite', 25),\n",
+ " ('bath', 10),\n",
+ " ('upgraded', 2),\n",
+ " ('access', 59),\n",
+ " ('ever', 3),\n",
+ " ('had', 1),\n",
+ " ('reading', 3),\n",
+ " ('couldn', 3),\n",
+ " ('put', 5),\n",
+ " ('down', 6),\n",
+ " ('but', 12),\n",
+ " ('never', 4),\n",
+ " ('wanted', 2),\n",
+ " ('end', 5),\n",
+ " ('know', 8),\n",
+ " ('kimpton', 5),\n",
+ " ('alexis', 3),\n",
+ " ('1901', 1),\n",
+ " ('building', 19),\n",
+ " ('close', 34),\n",
+ " ('enough', 5),\n",
+ " ('smell', 1),\n",
+ " ('sea', 23),\n",
+ " ('air', 11),\n",
+ " ('plot', 1),\n",
+ " ('peaceful', 2),\n",
+ " ('sanctuary', 2),\n",
+ " ('den', 1),\n",
+ " ('mixed', 1),\n",
+ " ('matched', 3),\n",
+ " ('characters', 1),\n",
+ " ('attentive', 3),\n",
+ " ('members', 1),\n",
+ " ('who', 5),\n",
+ " ('seem', 1),\n",
+ " ('plus', 15),\n",
+ " ('fellow', 2),\n",
+ " ('interesting', 3),\n",
+ " ('stories', 2),\n",
+ " ('tell', 4),\n",
+ " ('ending', 1),\n",
+ " ('without', 4),\n",
+ " ('giving', 3),\n",
+ " ('easy', 44),\n",
+ " ('perennial', 1),\n",
+ " ('seller', 1),\n",
+ " ('positioned', 1),\n",
+ " ('edge', 3),\n",
+ " ('borders', 1),\n",
+ " ('retail', 4),\n",
+ " ('guestrooms', 15),\n",
+ " ('turntables', 1),\n",
+ " ('vinyl', 1),\n",
+ " ('max', 1),\n",
+ " ('dedicated', 5),\n",
+ " ('lovers', 2),\n",
+ " ('indulge', 3),\n",
+ " ('provenance', 1),\n",
+ " ('locally', 7),\n",
+ " ('influenced', 1),\n",
+ " ('honor', 1),\n",
+ " ('beer', 5),\n",
+ " ('miller', 1),\n",
+ " ('guild', 1),\n",
+ " ('fell', 1),\n",
+ " ('former', 1),\n",
+ " ('maritime', 1),\n",
+ " ('workers', 1),\n",
+ " ('started', 1),\n",
+ " ('first', 19),\n",
+ " ('1999', 1),\n",
+ " ('roots', 1),\n",
+ " ('unfussy', 1),\n",
+ " ('intentional', 1),\n",
+ " ('design', 5),\n",
+ " ('ethos', 1),\n",
+ " ('drive', 12),\n",
+ " ('loft', 3),\n",
+ " ('ceilings', 3),\n",
+ " ('hardwood', 1),\n",
+ " ('floors', 7),\n",
+ " ('wherever', 1),\n",
+ " ('could', 5),\n",
+ " ('preserve', 1),\n",
+ " ('them', 3),\n",
+ " ('friends', 11),\n",
+ " ('kaws', 1),\n",
+ " ('shepard', 1),\n",
+ " ('fairey', 1),\n",
+ " ('were', 2),\n",
+ " ('elements', 3),\n",
+ " ('hotelier', 1),\n",
+ " ('map', 1),\n",
+ " ('still', 3),\n",
+ " ('touch', 1),\n",
+ " ('point', 1),\n",
+ " ('ace', 1),\n",
+ " ('today', 16),\n",
+ " ('when', 38),\n",
+ " ('marriott', 5),\n",
+ " ('reveals', 1),\n",
+ " ('mountains', 9),\n",
+ " ('famous', 15),\n",
+ " ('elevator', 2),\n",
+ " ('ride', 9),\n",
+ " ('sit', 3),\n",
+ " ('adjacent', 4),\n",
+ " ('harbor', 4),\n",
+ " ('also', 62),\n",
+ " ('port', 4),\n",
+ " ('aquarium', 10),\n",
+ " ('westlake', 5),\n",
+ " ('olympic', 13),\n",
+ " ('sculpture', 4),\n",
+ " ('park', 35),\n",
+ " ('outfitted', 3),\n",
+ " ('plush', 13),\n",
+ " ('bedding', 9),\n",
+ " ('mini', 7),\n",
+ " ('refrigerators', 5),\n",
+ " ('large', 11),\n",
+ " ('desks', 5),\n",
+ " ('wi', 37),\n",
+ " ('fi', 37),\n",
+ " ('balconies', 3),\n",
+ " ('junior', 1),\n",
+ " ('provide', 12),\n",
+ " ('perfect', 30),\n",
+ " ('extended', 15),\n",
+ " ('stays', 7),\n",
+ " ('reimagined', 2),\n",
+ " ('its', 21),\n",
+ " ('special', 13),\n",
+ " ('perks', 3),\n",
+ " ('indoor', 16),\n",
+ " ('gym', 3),\n",
+ " ('delicious', 8),\n",
+ " ('gastropub', 1),\n",
+ " ('tempting', 1),\n",
+ " ('libations', 1),\n",
+ " ('found', 5),\n",
+ " ('popular', 12),\n",
+ " ('look', 4),\n",
+ " ('no', 15),\n",
+ " ('further', 2),\n",
+ " ('10', 11),\n",
+ " ('redesigned', 1),\n",
+ " ('venues', 8),\n",
+ " ('well', 33),\n",
+ " ('supported', 1),\n",
+ " ('edgewater', 2),\n",
+ " ('reported', 1),\n",
+ " ('cnbc', 1),\n",
+ " ('amazing', 1),\n",
+ " ('breathtaking', 4),\n",
+ " ('sunset', 3),\n",
+ " ('ship', 5),\n",
+ " ('terminals', 5),\n",
+ " ('sites', 4),\n",
+ " ('decide', 1),\n",
+ " ('turn', 2),\n",
+ " ('tub', 8),\n",
+ " ('water', 10),\n",
+ " ('67', 1),\n",
+ " ('dynamic', 2),\n",
+ " ('soul', 1),\n",
+ " ('lodging', 6),\n",
+ " ('river', 1),\n",
+ " ('rock', 3),\n",
+ " ('fireplaces', 3),\n",
+ " ('wilderness', 2),\n",
+ " ('landscapes', 1),\n",
+ " ('outside', 13),\n",
+ " ('window', 1),\n",
+ " ('treat', 1),\n",
+ " ('yourself', 8),\n",
+ " ('rewarding', 1),\n",
+ " ('springhill', 2),\n",
+ " ('south', 19),\n",
+ " ('goal', 4),\n",
+ " ('whether', 23),\n",
+ " ('night', 13),\n",
+ " ('weekend', 2),\n",
+ " ('each', 28),\n",
+ " ('spacious', 29),\n",
+ " ('separate', 6),\n",
+ " ('kitchenette', 3),\n",
+ " ('fridge', 9),\n",
+ " ('maker', 7),\n",
+ " ('microwave', 12),\n",
+ " ('convenience', 18),\n",
+ " ('every', 29),\n",
+ " ('onsite', 8),\n",
+ " ('bistro', 3),\n",
+ " ('yale', 1),\n",
+ " ('innovative', 5),\n",
+ " ('additional', 4),\n",
+ " ('highlights', 1),\n",
+ " ('include', 19),\n",
+ " ('swimming', 10),\n",
+ " ('so', 12),\n",
+ " ('pamper', 2),\n",
+ " ('last', 2),\n",
+ " ('least', 1),\n",
+ " ('makes', 5),\n",
+ " ('mall', 11),\n",
+ " ('other', 21),\n",
+ " ('plan', 6),\n",
+ " ('forward', 1),\n",
+ " ('seeing', 1),\n",
+ " ('premier', 2),\n",
+ " ('fairmont', 3),\n",
+ " ('captures', 1),\n",
+ " ('old', 7),\n",
+ " ('elegance', 4),\n",
+ " ('italian', 2),\n",
+ " ('renaissance', 2),\n",
+ " ('built', 14),\n",
+ " ('1924', 1),\n",
+ " ('legendary', 2),\n",
+ " ('architecture', 1),\n",
+ " ('acclaimed', 3),\n",
+ " ('impeccable', 1),\n",
+ " ('corridors', 2),\n",
+ " ('full', 27),\n",
+ " ('shines', 1),\n",
+ " ('named', 4),\n",
+ " ('news', 3),\n",
+ " ('report', 3),\n",
+ " ('2018', 3),\n",
+ " ('hub', 6),\n",
+ " ('retreat', 6),\n",
+ " ('cozily', 2),\n",
+ " ('activity', 2),\n",
+ " ('streets', 2),\n",
+ " ('lined', 2),\n",
+ " ('diversified', 1),\n",
+ " ('sophisticated', 4),\n",
+ " ('chic', 5),\n",
+ " ('excursion', 2),\n",
+ " ('afternoon', 4),\n",
+ " ('gasworks', 1),\n",
+ " ('quiet', 11),\n",
+ " ('beauty', 5),\n",
+ " ('have', 35),\n",
+ " ('instant', 2),\n",
+ " ('both', 15),\n",
+ " ('worlds', 1),\n",
+ " ('travel', 25),\n",
+ " ('pleasure', 8),\n",
+ " ('trips', 1),\n",
+ " ('few', 16),\n",
+ " ('corporate', 10),\n",
+ " ('vacationers', 2),\n",
+ " ('museums', 6),\n",
+ " ('less', 11),\n",
+ " ('landmark', 9),\n",
+ " ('distinctly', 1),\n",
+ " ('charming', 1),\n",
+ " ('unmistakable', 1),\n",
+ " ('sprawling', 2),\n",
+ " ('system', 5),\n",
+ " ('shows', 3),\n",
+ " ('pristine', 2),\n",
+ " ('outdoors', 3),\n",
+ " ('performing', 1),\n",
+ " ('cultural', 7),\n",
+ " ('thriving', 6),\n",
+ " ('visitor', 1),\n",
+ " ('metro', 4),\n",
+ " ('attracts', 1),\n",
+ " ('deal', 1),\n",
+ " ('professional', 5),\n",
+ " ('travelers', 23),\n",
+ " ('booming', 1),\n",
+ " ('fortune', 2),\n",
+ " ('500', 4),\n",
+ " ('costco', 1),\n",
+ " ('wholesale', 1),\n",
+ " ('microsoft', 10),\n",
+ " ('facebook', 5),\n",
+ " ('furthermore', 1),\n",
+ " ('fans', 3),\n",
+ " ('athletic', 3),\n",
+ " ('three', 11),\n",
+ " ('teams', 2),\n",
+ " ('nestled', 4),\n",
+ " ('embassy', 2),\n",
+ " ('sleeping', 5),\n",
+ " ('queen', 28),\n",
+ " ('size', 6),\n",
+ " ('sofa', 7),\n",
+ " ('bed', 41),\n",
+ " ('50', 2),\n",
+ " ('inch', 11),\n",
+ " ('hdtv', 7),\n",
+ " ('kitchenettes', 6),\n",
+ " ('dine', 6),\n",
+ " ('institution', 1),\n",
+ " ('13', 1),\n",
+ " ('coins', 1),\n",
+ " ('hand', 6),\n",
+ " ('zephyr', 1),\n",
+ " ('stop', 12),\n",
+ " ('health', 4),\n",
+ " ('includes', 8),\n",
+ " ('heated', 12),\n",
+ " ('hot', 25),\n",
+ " ('sun', 2),\n",
+ " ('deck', 5),\n",
+ " ('begin', 3),\n",
+ " ('free', 123),\n",
+ " ('made', 5),\n",
+ " ('order', 3),\n",
+ " ('evening', 8),\n",
+ " ('55', 4),\n",
+ " ('cheer', 2),\n",
+ " ('team', 6),\n",
+ " ('football', 3),\n",
+ " ('fc', 2),\n",
+ " ('baseball', 2),\n",
+ " ('game', 7),\n",
+ " ('mobile', 4),\n",
+ " ('trip', 11),\n",
+ " ('around', 14),\n",
+ " ('boat', 2),\n",
+ " ('wamu', 1),\n",
+ " ('pan', 1),\n",
+ " ('trust', 2),\n",
+ " ('settle', 4),\n",
+ " ('into', 13),\n",
+ " ('epicentre', 1),\n",
+ " ('wondering', 1),\n",
+ " ('vintage', 2),\n",
+ " ('spot', 2),\n",
+ " ('corner', 6),\n",
+ " ('spring', 3),\n",
+ " ('financial', 2),\n",
+ " ('spots', 3),\n",
+ " ('benaroya', 2),\n",
+ " ('hall', 5),\n",
+ " ('trade', 2),\n",
+ " ('transportation', 7),\n",
+ " ('easily', 7),\n",
+ " ('walkable', 3),\n",
+ " ('ferry', 3),\n",
+ " ('dozens', 2),\n",
+ " ('buses', 2),\n",
+ " ('driving', 3),\n",
+ " ('those', 4),\n",
+ " ('coming', 2),\n",
+ " ('tac', 15),\n",
+ " ...]"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "words_freq = [(word, sum_words[0,idx]) for word,idx in vec.vocabulary_.items()] # 得到词及对应出现的次数\n",
+ "words_freq"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[('the', 1258),\n",
+ " ('and', 1062),\n",
+ " ('of', 536),\n",
+ " ('seattle', 533),\n",
+ " ('to', 471),\n",
+ " ('in', 449),\n",
+ " ('our', 359),\n",
+ " ('you', 304),\n",
+ " ('hotel', 295),\n",
+ " ('with', 280),\n",
+ " ('is', 271),\n",
+ " ('at', 231),\n",
+ " ('from', 224),\n",
+ " ('for', 216),\n",
+ " ('your', 186),\n",
+ " ('or', 161),\n",
+ " ('center', 151),\n",
+ " ('are', 136),\n",
+ " ('downtown', 133),\n",
+ " ('on', 129),\n",
+ " ('we', 128),\n",
+ " ('free', 123),\n",
+ " ('as', 117),\n",
+ " ('located', 108),\n",
+ " ('rooms', 106),\n",
+ " ('stay', 105),\n",
+ " ('place', 102),\n",
+ " ('all', 100),\n",
+ " ('airport', 99),\n",
+ " ('space', 97),\n",
+ " ('market', 97),\n",
+ " ('enjoy', 93),\n",
+ " ('an', 91),\n",
+ " ('pike', 90),\n",
+ " ('inn', 89),\n",
+ " ('business', 87),\n",
+ " ('just', 82),\n",
+ " ('city', 79),\n",
+ " ('room', 77),\n",
+ " ('one', 75),\n",
+ " ('by', 71),\n",
+ " ('breakfast', 68),\n",
+ " ('needle', 68),\n",
+ " ('suites', 67),\n",
+ " ('washington', 67),\n",
+ " ('that', 65),\n",
+ " ('re', 64),\n",
+ " ('this', 63),\n",
+ " ('complimentary', 62),\n",
+ " ('also', 62),\n",
+ " ('amenities', 60),\n",
+ " ('offer', 59),\n",
+ " ('attractions', 59),\n",
+ " ('away', 59),\n",
+ " ('access', 59),\n",
+ " ('home', 57),\n",
+ " ('guest', 57),\n",
+ " ('can', 55),\n",
+ " ('it', 55),\n",
+ " ('guests', 54),\n",
+ " ('service', 53),\n",
+ " ('experience', 52),\n",
+ " ('area', 51),\n",
+ " ('best', 50),\n",
+ " ('ll', 48),\n",
+ " ('near', 48),\n",
+ " ('including', 47),\n",
+ " ('like', 46),\n",
+ " ('will', 46),\n",
+ " ('local', 45),\n",
+ " ('art', 44),\n",
+ " ('up', 44),\n",
+ " ('easy', 44),\n",
+ " ('make', 43),\n",
+ " ('museum', 43),\n",
+ " ('offers', 43),\n",
+ " ('be', 43),\n",
+ " ('minutes', 43),\n",
+ " ('university', 43),\n",
+ " ('pacific', 42),\n",
+ " ('northwest', 42),\n",
+ " ('24', 42),\n",
+ " ('fitness', 42),\n",
+ " ('lake', 41),\n",
+ " ('has', 41),\n",
+ " ('bed', 41),\n",
+ " ('most', 40),\n",
+ " ('views', 39),\n",
+ " ('great', 39),\n",
+ " ('day', 39),\n",
+ " ('waterfront', 38),\n",
+ " ('coffee', 38),\n",
+ " ('when', 38),\n",
+ " ('pool', 37),\n",
+ " ('wi', 37),\n",
+ " ('fi', 37),\n",
+ " ('dining', 36),\n",
+ " ('available', 36),\n",
+ " ('within', 36),\n",
+ " ('neighborhood', 35),\n",
+ " ('restaurants', 35),\n",
+ " ('heart', 35),\n",
+ " ('park', 35),\n",
+ " ('have', 35),\n",
+ " ('bar', 34),\n",
+ " ('only', 34),\n",
+ " ('modern', 34),\n",
+ " ('while', 34),\n",
+ " ('field', 34),\n",
+ " ('close', 34),\n",
+ " ('union', 33),\n",
+ " ('location', 33),\n",
+ " ('well', 33),\n",
+ " ('international', 32),\n",
+ " ('hour', 32),\n",
+ " ('restaurant', 32),\n",
+ " ('high', 32),\n",
+ " ('parking', 32),\n",
+ " ('take', 31),\n",
+ " ('find', 31),\n",
+ " ('shopping', 31),\n",
+ " ('many', 31),\n",
+ " ('shuttle', 31),\n",
+ " ('state', 30),\n",
+ " ('comfortable', 30),\n",
+ " ('perfect', 30),\n",
+ " ('event', 29),\n",
+ " ('private', 29),\n",
+ " ('more', 29),\n",
+ " ('friendly', 29),\n",
+ " ('spacious', 29),\n",
+ " ('every', 29),\n",
+ " ('hotels', 28),\n",
+ " ('square', 28),\n",
+ " ('walk', 28),\n",
+ " ('each', 28),\n",
+ " ('queen', 28),\n",
+ " ('meeting', 27),\n",
+ " ('features', 27),\n",
+ " ('style', 27),\n",
+ " ('where', 27),\n",
+ " ('district', 27),\n",
+ " ('full', 27),\n",
+ " ('light', 26),\n",
+ " ('featuring', 26),\n",
+ " ('lobby', 26),\n",
+ " ('internet', 26),\n",
+ " ('street', 26),\n",
+ " ('two', 26),\n",
+ " ('such', 26),\n",
+ " ('speed', 26),\n",
+ " ('tacoma', 26),\n",
+ " ('need', 25),\n",
+ " ('relax', 25),\n",
+ " ('work', 25),\n",
+ " ('suite', 25),\n",
+ " ('travel', 25),\n",
+ " ('hot', 25),\n",
+ " ('wifi', 25),\n",
+ " ('family', 25),\n",
+ " ('km', 25),\n",
+ " ('world', 24),\n",
+ " ('comfort', 24),\n",
+ " ('historic', 24),\n",
+ " ('convention', 24),\n",
+ " ('time', 24),\n",
+ " ('miles', 24),\n",
+ " ('out', 23),\n",
+ " ('outdoor', 23),\n",
+ " ('distance', 23),\n",
+ " ('sea', 23),\n",
+ " ('whether', 23),\n",
+ " ('travelers', 23),\n",
+ " ('some', 22),\n",
+ " ('living', 22),\n",
+ " ('flat', 22),\n",
+ " ('us', 21),\n",
+ " ('sound', 21),\n",
+ " ('offering', 21),\n",
+ " ('designed', 21),\n",
+ " ('walking', 21),\n",
+ " ('visit', 21),\n",
+ " ('blocks', 21),\n",
+ " ('its', 21),\n",
+ " ('other', 21),\n",
+ " ('hill', 21),\n",
+ " ('lounge', 20),\n",
+ " ('not', 20),\n",
+ " ('safeco', 20),\n",
+ " ('explore', 20),\n",
+ " ('steps', 20),\n",
+ " ('welcome', 20),\n",
+ " ('next', 20),\n",
+ " ('feature', 20),\n",
+ " ('site', 20),\n",
+ " ('sure', 20),\n",
+ " ('amazon', 19),\n",
+ " ('here', 19),\n",
+ " ('than', 19),\n",
+ " ('if', 19),\n",
+ " ('rail', 19),\n",
+ " ('off', 19),\n",
+ " ('building', 19),\n",
+ " ('first', 19),\n",
+ " ('south', 19),\n",
+ " ('include', 19),\n",
+ " ('property', 19),\n",
+ " ('wa', 19),\n",
+ " ('motel', 19),\n",
+ " ('leisure', 18),\n",
+ " ('everything', 18),\n",
+ " ('luxury', 18),\n",
+ " ('fresh', 18),\n",
+ " ('morning', 18),\n",
+ " ('convenience', 18),\n",
+ " ('through', 18),\n",
+ " ('minute', 18),\n",
+ " ('new', 17),\n",
+ " ('club', 17),\n",
+ " ('stylish', 17),\n",
+ " ('kitchen', 17),\n",
+ " ('beds', 17),\n",
+ " ('come', 17),\n",
+ " ('emerald', 17),\n",
+ " ('centurylink', 17),\n",
+ " ('top', 17),\n",
+ " ('short', 17),\n",
+ " ('equipped', 17),\n",
+ " ('tv', 17),\n",
+ " ('food', 17),\n",
+ " ('screen', 17),\n",
+ " ('nearby', 16),\n",
+ " ('puget', 16),\n",
+ " ('meetings', 16),\n",
+ " ('feet', 16),\n",
+ " ('across', 16),\n",
+ " ('music', 16),\n",
+ " ('unique', 16),\n",
+ " ('today', 16),\n",
+ " ('indoor', 16),\n",
+ " ('few', 16),\n",
+ " ('convenient', 16),\n",
+ " ('capitol', 16),\n",
+ " ('fun', 16),\n",
+ " ('traveling', 16),\n",
+ " ('flight', 16),\n",
+ " ('iconic', 15),\n",
+ " ('west', 15),\n",
+ " ('avenue', 15),\n",
+ " ('see', 15),\n",
+ " ('pioneer', 15),\n",
+ " ('accommodations', 15),\n",
+ " ('right', 15),\n",
+ " ('urban', 15),\n",
+ " ('there', 15),\n",
+ " ('hyatt', 15),\n",
+ " ('plus', 15),\n",
+ " ('guestrooms', 15),\n",
+ " ('famous', 15),\n",
+ " ('extended', 15),\n",
+ " ('no', 15),\n",
+ " ('both', 15),\n",
+ " ('tac', 15),\n",
+ " ('anne', 15),\n",
+ " ('over', 14),\n",
+ " ('vibrant', 14),\n",
+ " ('north', 14),\n",
+ " ('options', 14),\n",
+ " ('mile', 14),\n",
+ " ('which', 14),\n",
+ " ('situated', 14),\n",
+ " ('comforts', 14),\n",
+ " ('signature', 14),\n",
+ " ('shops', 14),\n",
+ " ('bay', 14),\n",
+ " ('built', 14),\n",
+ " ('around', 14),\n",
+ " ('start', 14),\n",
+ " ('conveniently', 14),\n",
+ " ('events', 14),\n",
+ " ('continental', 14),\n",
+ " ('grand', 13),\n",
+ " ('class', 13),\n",
+ " ('award', 13),\n",
+ " ('spa', 13),\n",
+ " ('sports', 13),\n",
+ " ('town', 13),\n",
+ " ('belltown', 13),\n",
+ " ('along', 13),\n",
+ " ('olympic', 13),\n",
+ " ('plush', 13),\n",
+ " ('special', 13),\n",
+ " ('outside', 13),\n",
+ " ('night', 13),\n",
+ " ('into', 13),\n",
+ " ('after', 13),\n",
+ " ('facilities', 13),\n",
+ " ('long', 13),\n",
+ " ('pet', 13),\n",
+ " ('medical', 13),\n",
+ " ('hilton', 12),\n",
+ " ('major', 12),\n",
+ " ('variety', 12),\n",
+ " ('starbucks', 12),\n",
+ " ('relaxing', 12),\n",
+ " ('advantage', 12),\n",
+ " ('central', 12),\n",
+ " ('contemporary', 12),\n",
+ " ('areas', 12),\n",
+ " ('five', 12),\n",
+ " ('any', 12),\n",
+ " ('inspired', 12),\n",
+ " ('staying', 12),\n",
+ " ('meet', 12),\n",
+ " ('but', 12),\n",
+ " ('drive', 12),\n",
+ " ('provide', 12),\n",
+ " ('popular', 12),\n",
+ " ('microwave', 12),\n",
+ " ('so', 12),\n",
+ " ('stop', 12),\n",
+ " ('heated', 12),\n",
+ " ('bathroom', 12),\n",
+ " ('house', 12),\n",
+ " ('laundry', 12),\n",
+ " ('beautiful', 12),\n",
+ " ('seatac', 12),\n",
+ " ('garden', 11),\n",
+ " ('000', 11),\n",
+ " ('unwind', 11),\n",
+ " ('cuisine', 11),\n",
+ " ('step', 11),\n",
+ " ('front', 11),\n",
+ " ('entertainment', 11),\n",
+ " ('book', 11),\n",
+ " ('they', 11),\n",
+ " ('spaces', 11),\n",
+ " ('winning', 11),\n",
+ " ('help', 11),\n",
+ " ('get', 11),\n",
+ " ('what', 11),\n",
+ " ('view', 11),\n",
+ " ('floor', 11),\n",
+ " ('original', 11),\n",
+ " ('about', 11),\n",
+ " ('cruise', 11),\n",
+ " ('social', 11),\n",
+ " ('studio', 11),\n",
+ " ('feel', 11),\n",
+ " ('want', 11),\n",
+ " ('upscale', 11),\n",
+ " ('air', 11),\n",
+ " ('friends', 11),\n",
+ " ('large', 11),\n",
+ " ('10', 11),\n",
+ " ('mall', 11),\n",
+ " ('quiet', 11),\n",
+ " ('less', 11),\n",
+ " ('three', 11),\n",
+ " ('inch', 11),\n",
+ " ('trip', 11),\n",
+ " ('link', 11),\n",
+ " ('check', 11),\n",
+ " ('hospitality', 11),\n",
+ " ('back', 11),\n",
+ " ('cable', 11),\n",
+ " ('was', 11),\n",
+ " ('boeing', 11),\n",
+ " ('visiting', 11),\n",
+ " ('desk', 11),\n",
+ " ('glass', 10),\n",
+ " ('daily', 10),\n",
+ " ('seahawks', 10),\n",
+ " ('renovated', 10),\n",
+ " ('wine', 10),\n",
+ " ('cozy', 10),\n",
+ " ('charm', 10),\n",
+ " ('inviting', 10),\n",
+ " ('block', 10),\n",
+ " ('elliott', 10),\n",
+ " ('then', 10),\n",
+ " ('live', 10),\n",
+ " ('seasonal', 10),\n",
+ " ('bath', 10),\n",
+ " ('aquarium', 10),\n",
+ " ('water', 10),\n",
+ " ('swimming', 10),\n",
+ " ('corporate', 10),\n",
+ " ('microsoft', 10),\n",
+ " ('fully', 10),\n",
+ " ('history', 10),\n",
+ " ('ideal', 10),\n",
+ " ('furnishings', 10),\n",
+ " ('tvs', 10),\n",
+ " ('hours', 10),\n",
+ " ('campus', 10),\n",
+ " ('door', 10),\n",
+ " ('hospital', 10),\n",
+ " ('mason', 10),\n",
+ " ('staff', 9),\n",
+ " ('snacks', 9),\n",
+ " ('provides', 9),\n",
+ " ('wireless', 9),\n",
+ " ('mariners', 9),\n",
+ " ('range', 9),\n",
+ " ('host', 9),\n",
+ " ('love', 9),\n",
+ " ('appointed', 9),\n",
+ " ('spend', 9),\n",
+ " ('during', 9),\n",
+ " ('four', 9),\n",
+ " ('mountains', 9),\n",
+ " ('ride', 9),\n",
+ " ('bedding', 9),\n",
+ " ('fridge', 9),\n",
+ " ('landmark', 9),\n",
+ " ('20', 9),\n",
+ " ('use', 9),\n",
+ " ('vacation', 9),\n",
+ " ('choice', 9),\n",
+ " ('community', 9),\n",
+ " ('businesses', 9),\n",
+ " ('value', 9),\n",
+ " ('bedroom', 9),\n",
+ " ('windows', 9),\n",
+ " ('days', 9),\n",
+ " ('courtyard', 9),\n",
+ " ('catch', 9),\n",
+ " ('extra', 9),\n",
+ " ('red', 9),\n",
+ " ('road', 9),\n",
+ " ('virginia', 9),\n",
+ " ('mansion', 9),\n",
+ " ('eclectic', 8),\n",
+ " ('proximity', 8),\n",
+ " ('activities', 8),\n",
+ " ('natural', 8),\n",
+ " ('sheraton', 8),\n",
+ " ('doors', 8),\n",
+ " ('small', 8),\n",
+ " ('skyline', 8),\n",
+ " ('planning', 8),\n",
+ " ('catering', 8),\n",
+ " ('mind', 8),\n",
+ " ('boutique', 8),\n",
+ " ('warm', 8),\n",
+ " ('rooftop', 8),\n",
+ " ('rich', 8),\n",
+ " ('known', 8),\n",
+ " ('classic', 8),\n",
+ " ('know', 8),\n",
+ " ('delicious', 8),\n",
+ " ('venues', 8),\n",
+ " ('tub', 8),\n",
+ " ('yourself', 8),\n",
+ " ('onsite', 8),\n",
+ " ('pleasure', 8),\n",
+ " ('includes', 8),\n",
+ " ('evening', 8),\n",
+ " ('directly', 8),\n",
+ " ('alike', 8),\n",
+ " ('cancer', 8),\n",
+ " ('traveler', 8),\n",
+ " ('stadium', 8),\n",
+ " ('even', 8),\n",
+ " ('escape', 8),\n",
+ " ('king', 8),\n",
+ " ('refrigerator', 8),\n",
+ " ('premium', 8),\n",
+ " ('budget', 8),\n",
+ " ('facility', 8),\n",
+ " ('renton', 8),\n",
+ " ('alfred', 8),\n",
+ " ('silver', 8),\n",
+ " ('cloud', 8),\n",
+ " ('bars', 7),\n",
+ " ('reception', 7),\n",
+ " ('dinner', 7),\n",
+ " ('exciting', 7),\n",
+ " ('recently', 7),\n",
+ " ('favorite', 7),\n",
+ " ('inside', 7),\n",
+ " ('stunning', 7),\n",
+ " ('throughout', 7),\n",
+ " ('workout', 7),\n",
+ " ('library', 7),\n",
+ " ('gorgeous', 7),\n",
+ " ('wood', 7),\n",
+ " ('seating', 7),\n",
+ " ('among', 7),\n",
+ " ('car', 7),\n",
+ " ('arts', 7),\n",
+ " ('atmosphere', 7),\n",
+ " ('fit', 7),\n",
+ " ('always', 7),\n",
+ " ('ve', 7),\n",
+ " ('locally', 7),\n",
+ " ('floors', 7),\n",
+ " ('mini', 7),\n",
+ " ('stays', 7),\n",
+ " ('maker', 7),\n",
+ " ('old', 7),\n",
+ " ('cultural', 7),\n",
+ " ('sofa', 7),\n",
+ " ('hdtv', 7),\n",
+ " ('game', 7),\n",
+ " ('transportation', 7),\n",
+ " ('easily', 7),\n",
+ " ('open', 7),\n",
+ " ('executive', 7),\n",
+ " ('apartment', 7),\n",
+ " ('kitchens', 7),\n",
+ " ('been', 7),\n",
+ " ('non', 7),\n",
+ " ('bathrooms', 7),\n",
+ " ('table', 7),\n",
+ " ('hostel', 7),\n",
+ " ('roof', 7),\n",
+ " ('ballard', 7),\n",
+ " ('proud', 7),\n",
+ " ('station', 7),\n",
+ " ('services', 7),\n",
+ " ('european', 7),\n",
+ " ('southcenter', 7),\n",
+ " ('people', 7),\n",
+ " ('100', 7),\n",
+ " ('needs', 7),\n",
+ " ('looking', 7),\n",
+ " ('don', 7),\n",
+ " ('15', 7),\n",
+ " ('shoreline', 7),\n",
+ " ('much', 7),\n",
+ " ('broadway', 7),\n",
+ " ('perfectly', 6),\n",
+ " ('companies', 6),\n",
+ " ('google', 6),\n",
+ " ('conference', 6),\n",
+ " ('cocktail', 6),\n",
+ " ('drinks', 6),\n",
+ " ('seven', 6),\n",
+ " ('collection', 6),\n",
+ " ('sleep', 6),\n",
+ " ('savor', 6),\n",
+ " ('happy', 6),\n",
+ " ('public', 6),\n",
+ " ('nordstrom', 6),\n",
+ " ('terminal', 6),\n",
+ " ('spectacular', 6),\n",
+ " ('custom', 6),\n",
+ " ('simple', 6),\n",
+ " ('fireplace', 6),\n",
+ " ('wide', 6),\n",
+ " ('culture', 6),\n",
+ " ('patio', 6),\n",
+ " ('join', 6),\n",
+ " ('setting', 6),\n",
+ " ('wake', 6),\n",
+ " ('cup', 6),\n",
+ " ('hiking', 6),\n",
+ " ('scene', 6),\n",
+ " ('getaway', 6),\n",
+ " ('theater', 6),\n",
+ " ('landmarks', 6),\n",
+ " ('down', 6),\n",
+ " ('lodging', 6),\n",
+ " ('separate', 6),\n",
+ " ('plan', 6),\n",
+ " ('hub', 6),\n",
+ " ('retreat', 6),\n",
+ " ('museums', 6),\n",
+ " ('thriving', 6),\n",
+ " ('size', 6),\n",
+ " ('kitchenettes', 6),\n",
+ " ('dine', 6),\n",
+ " ('hand', 6),\n",
+ " ('team', 6),\n",
+ " ('corner', 6),\n",
+ " ('do', 6),\n",
+ " ('ready', 6),\n",
+ " ('centers', 6),\n",
+ " ('own', 6),\n",
+ " ('experiences', 6),\n",
+ " ('complete', 6),\n",
+ " ('brings', 6),\n",
+ " ('furnished', 6),\n",
+ " ('ideally', 6),\n",
+ " ('kind', 6),\n",
+ " ('creative', 6),\n",
+ " ('discover', 6),\n",
+ " ('television', 6),\n",
+ " ('bus', 6),\n",
+ " ('homewood', 6),\n",
+ " ('nightlife', 6),\n",
+ " ('regency', 6),\n",
+ " ('level', 6),\n",
+ " ('go', 6),\n",
+ " ('flexible', 6),\n",
+ " ('grill', 6),\n",
+ " ('key', 6),\n",
+ " ('mt', 6),\n",
+ " ('rainier', 6),\n",
+ " ('buffet', 6),\n",
+ " ('zoo', 6),\n",
+ " ('matter', 6),\n",
+ " ('headquarters', 6),\n",
+ " ('play', 6),\n",
+ " ('shower', 6),\n",
+ " ('westfield', 6),\n",
+ " ('quick', 6),\n",
+ " ('smoking', 6),\n",
+ " ('channels', 6),\n",
+ " ('rate', 6),\n",
+ " ('tea', 6),\n",
+ " ('enjoyable', 6),\n",
+ " ('research', 6),\n",
+ " ('busy', 6),\n",
+ " ('fred', 6),\n",
+ " ('hutchinson', 6),\n",
+ " ('very', 6),\n",
+ " ('apartments', 6),\n",
+ " ('resort', 6),\n",
+ " ('gates', 5),\n",
+ " ('locals', 5),\n",
+ " ('american', 5),\n",
+ " ('core', 5),\n",
+ " ('diverse', 5),\n",
+ " ('america', 5),\n",
+ " ('expanded', 5),\n",
+ " ('enjoying', 5),\n",
+ " ('beverage', 5),\n",
+ " ('several', 5),\n",
+ " ('crowne', 5),\n",
+ " ('exceptional', 5),\n",
+ " ('cool', 5),\n",
+ " ('drink', 5),\n",
+ " ('better', 5),\n",
+ " ('might', 5),\n",
+ " ('half', 5),\n",
+ " ('must', 5),\n",
+ " ('houses', 5),\n",
+ " ('boutiques', 5),\n",
+ " ('pier', 5),\n",
+ " ('stadiums', 5),\n",
+ " ('mountain', 5),\n",
+ " ('newly', 5),\n",
+ " ('sleek', 5),\n",
+ " ('welcoming', 5),\n",
+ " ('elegant', 5),\n",
+ " ('residence', 5),\n",
+ " ('puts', 5),\n",
+ " ('tour', 5),\n",
+ " ('via', 5),\n",
+ " ('destination', 5),\n",
+ " ('culinary', 5),\n",
+ " ('cocktails', 5),\n",
+ " ('between', 5),\n",
+ " ('monorail', 5),\n",
+ " ('warwick', 5),\n",
+ " ('way', 5),\n",
+ " ('possible', 5),\n",
+ " ('head', 5),\n",
+ " ('craft', 5),\n",
+ " ('put', 5),\n",
+ " ('end', 5),\n",
+ " ('kimpton', 5),\n",
+ " ('enough', 5),\n",
+ " ('who', 5),\n",
+ " ('dedicated', 5),\n",
+ " ('beer', 5),\n",
+ " ('design', 5),\n",
+ " ('could', 5),\n",
+ " ('marriott', 5),\n",
+ " ('westlake', 5),\n",
+ " ('refrigerators', 5),\n",
+ " ('desks', 5),\n",
+ " ('found', 5),\n",
+ " ('ship', 5),\n",
+ " ('terminals', 5),\n",
+ " ('innovative', 5),\n",
+ " ('makes', 5),\n",
+ " ('chic', 5),\n",
+ " ('beauty', 5),\n",
+ " ('system', 5),\n",
+ " ('professional', 5),\n",
+ " ('facebook', 5),\n",
+ " ('sleeping', 5),\n",
+ " ('deck', 5),\n",
+ " ('made', 5),\n",
+ " ('hall', 5),\n",
+ " ('30', 5),\n",
+ " ('connected', 5),\n",
+ " ('customer', 5),\n",
+ " ('panel', 5),\n",
+ " ('televisions', 5),\n",
+ " ('wines', 5),\n",
+ " ('course', 5),\n",
+ " ('too', 5),\n",
+ " ('list', 5),\n",
+ " ('ensure', 5),\n",
+ " ('holiday', 5),\n",
+ " ('either', 5),\n",
+ " ('districts', 5),\n",
+ " ('fremont', 5),\n",
+ " ('choose', 5),\n",
+ " ('soft', 5),\n",
+ " ('lifestyle', 5),\n",
+ " ('adventure', 5),\n",
+ " ('adventures', 5),\n",
+ " ('simply', 5),\n",
+ " ('these', 5),\n",
+ " ('beverages', 5),\n",
+ " ('forget', 5),\n",
+ " ('store', 5),\n",
+ " ('intimate', 5),\n",
+ " ('receptions', 5),\n",
+ " ('details', 5),\n",
+ " ('century', 5),\n",
+ " ('cities', 5),\n",
+ " ('oasis', 5),\n",
+ " ('communal', 5),\n",
+ " ('express', 5),\n",
+ " ('residential', 5),\n",
+ " ('runs', 5),\n",
+ " ('woodland', 5),\n",
+ " ('personal', 5),\n",
+ " ('yet', 5),\n",
+ " ('bellevue', 5),\n",
+ " ('interior', 5),\n",
+ " ('healthy', 5),\n",
+ " ('above', 5),\n",
+ " ('stress', 5),\n",
+ " ('term', 5),\n",
+ " ('accessible', 5),\n",
+ " ('run', 5),\n",
+ " ('lodge', 5),\n",
+ " ('filled', 5),\n",
+ " ('boardroom', 5),\n",
+ " ('green', 5),\n",
+ " ('self', 5),\n",
+ " ('units', 5),\n",
+ " ('bustling', 5),\n",
+ " ('college', 5),\n",
+ " ('northgate', 5),\n",
+ " ('round', 5),\n",
+ " ('hit', 5),\n",
+ " ('won', 5),\n",
+ " ('ten', 5),\n",
+ " ('pride', 5),\n",
+ " ('landing', 5),\n",
+ " ('linens', 5),\n",
+ " ('ourselves', 5),\n",
+ " ('bill', 4),\n",
+ " ('melinda', 4),\n",
+ " ('foundation', 4),\n",
+ " ('visitors', 4),\n",
+ " ('majestic', 4),\n",
+ " ('sq', 4),\n",
+ " ('ft', 4),\n",
+ " ('technology', 4),\n",
+ " ('wedding', 4),\n",
+ " ('success', 4),\n",
+ " ('refresh', 4),\n",
+ " ('latest', 4),\n",
+ " ('tastefully', 4),\n",
+ " ('decorated', 4),\n",
+ " ('productive', 4),\n",
+ " ('lunch', 4),\n",
+ " ('gateway', 4),\n",
+ " ('plaza', 4),\n",
+ " ('touches', 4),\n",
+ " ('set', 4),\n",
+ " ('lights', 4),\n",
+ " ('addition', 4),\n",
+ " ('rest', 4),\n",
+ " ('5th', 4),\n",
+ " ('sounders', 4),\n",
+ " ('curated', 4),\n",
+ " ('paramount', 4),\n",
+ " ('luxurious', 4),\n",
+ " ('comfy', 4),\n",
+ " ('good', 4),\n",
+ " ('why', 4),\n",
+ " ('sightseeing', 4),\n",
+ " ('leading', 4),\n",
+ " ('refreshing', 4),\n",
+ " ('covered', 4),\n",
+ " ('surrounded', 4),\n",
+ " ('trendy', 4),\n",
+ " ('side', 4),\n",
+ " ('let', 4),\n",
+ " ('show', 4),\n",
+ " ('memorable', 4),\n",
+ " ('fare', 4),\n",
+ " ('got', 4),\n",
+ " ('diamond', 4),\n",
+ " ('scenic', 4),\n",
+ " ('never', 4),\n",
+ " ('tell', 4),\n",
+ " ('without', 4),\n",
+ " ('retail', 4),\n",
+ " ('adjacent', 4),\n",
+ " ('harbor', 4),\n",
+ " ('port', 4),\n",
+ " ('sculpture', 4),\n",
+ " ('look', 4),\n",
+ " ('breathtaking', 4),\n",
+ " ('sites', 4),\n",
+ " ('goal', 4),\n",
+ " ('additional', 4),\n",
+ " ('elegance', 4),\n",
+ " ('named', 4),\n",
+ " ('sophisticated', 4),\n",
+ " ('afternoon', 4),\n",
+ " ('metro', 4),\n",
+ " ('500', 4),\n",
+ " ('nestled', 4),\n",
+ " ('health', 4),\n",
+ " ('55', 4),\n",
+ " ('mobile', 4),\n",
+ " ('settle', 4),\n",
+ " ('those', 4),\n",
+ " ('getting', 4),\n",
+ " ('things', 4),\n",
+ " ('science', 4),\n",
+ " ('42', 4),\n",
+ " ('keep', 4),\n",
+ " ('watch', 4),\n",
+ " ('coast', 4),\n",
+ " ('bright', 4),\n",
+ " ('plug', 4),\n",
+ " ('selection', 4),\n",
+ " ('stand', 4),\n",
+ " ('unparalleled', 4),\n",
+ " ('expansive', 4),\n",
+ " ('energy', 4),\n",
+ " ('ours', 4),\n",
+ " ('4th', 4),\n",
+ " ('would', 4),\n",
+ " ('board', 4),\n",
+ " ('active', 4),\n",
+ " ('kick', 4),\n",
+ " ('fuel', 4),\n",
+ " ('western', 4),\n",
+ " ('romantic', 4),\n",
+ " ('clean', 4),\n",
+ " ('same', 4),\n",
+ " ('upgrade', 4),\n",
+ " ('monday', 4),\n",
+ " ('something', 4),\n",
+ " ('casual', 4),\n",
+ " ('marble', 4),\n",
+ " ('12', 4),\n",
+ " ('movie', 4),\n",
+ " ('arena', 4),\n",
+ " ('served', 4),\n",
+ " ('accommodate', 4),\n",
+ " ('week', 4),\n",
+ " ('owned', 4),\n",
+ " ('mediterranean', 4),\n",
+ " ('delivers', 4),\n",
+ " ('hip', 4),\n",
+ " ('leave', 4),\n",
+ " ('products', 4),\n",
+ " ('twin', 4),\n",
+ " ('early', 4),\n",
+ " ('train', 4),\n",
+ " ('exercise', 4),\n",
+ " ('freshly', 4),\n",
+ " ('menu', 4),\n",
+ " ('function', 4),\n",
+ " ('deluxe', 4),\n",
+ " ('redmond', 4),\n",
+ " ('snack', 4),\n",
+ " ('seafood', 4),\n",
+ " ('dip', 4),\n",
+ " ('overnight', 4),\n",
+ " ('greet', 4),\n",
+ " ('relaxed', 4),\n",
+ " ('exploring', 4),\n",
+ " ('shop', 4),\n",
+ " ('affordable', 4),\n",
+ " ('give', 4),\n",
+ " ('rewards', 4),\n",
+ " ('program', 4),\n",
+ " ('making', 4),\n",
+ " ('pillow', 4),\n",
+ " ('authentic', 4),\n",
+ " ('inspiring', 4),\n",
+ " ('how', 4),\n",
+ " ('smoke', 4),\n",
+ " ('405', 4),\n",
+ " ('hampton', 4),\n",
+ " ('kids', 4),\n",
+ " ('everyone', 4),\n",
+ " ('meals', 4),\n",
+ " ('99', 4),\n",
+ " ('11', 4),\n",
+ " ('accommodation', 4),\n",
+ " ('training', 4),\n",
+ " ('beach', 4),\n",
+ " ('points', 4),\n",
+ " ('tours', 4),\n",
+ " ('econo', 4),\n",
+ " ('microwaves', 4),\n",
+ " ('outlets', 4),\n",
+ " ('little', 4),\n",
+ " ('conditioned', 4),\n",
+ " ('americas', 4),\n",
+ " ('money', 4),\n",
+ " ('historical', 4),\n",
+ " ('year', 4),\n",
+ " ('attention', 4),\n",
+ " ('jimmy', 4),\n",
+ " ('national', 4),\n",
+ " ('theodore', 4),\n",
+ " ('warmth', 4),\n",
+ " ('maxwell', 4),\n",
+ " ('creature', 4),\n",
+ " ('definition', 4),\n",
+ " ('bacon', 4),\n",
+ " ('georgetown', 4),\n",
+ " ('grove', 4),\n",
+ " ('watertown', 4),\n",
+ " ('gaslight', 4),\n",
+ " ('oak', 4),\n",
+ " ('southport', 4),\n",
+ " ('allows', 3),\n",
+ " ('kayaking', 3),\n",
+ " ('versatile', 3),\n",
+ " ('guarantee', 3),\n",
+ " ('equipment', 3),\n",
+ " ('chihuly', 3),\n",
+ " ('earn', 3),\n",
+ " ('chef', 3),\n",
+ " ('blend', 3),\n",
+ " ('soon', 3),\n",
+ " ('concierge', 3),\n",
+ " ('fantastic', 3),\n",
+ " ('amid', 3),\n",
+ " ('incredible', 3),\n",
+ " ('haven', 3),\n",
+ " ('prime', 3),\n",
+ " ('crafted', 3),\n",
+ " ('celebrated', 3),\n",
+ " ('unforgettable', 3),\n",
+ " ('reflect', 3),\n",
+ " ('hosts', 3),\n",
+ " ('company', 3),\n",
+ " ('underground', 3),\n",
+ " ('everywhere', 3),\n",
+ " ('landscape', 3),\n",
+ " ('region', 3),\n",
+ " ('bounty', 3),\n",
+ " ('truly', 3),\n",
+ " ('pleasant', 3),\n",
+ " ('breeze', 3),\n",
+ " ('deep', 3),\n",
+ " ('waters', 3),\n",
+ " ('straight', 3),\n",
+ " ('breweries', 3),\n",
+ " ('mount', 3),\n",
+ " ('soak', 3),\n",
+ " ('before', 3),\n",
+ " ('heading', 3),\n",
+ " ('destinations', 3),\n",
+ " ('ever', 3),\n",
+ " ('reading', 3),\n",
+ " ('couldn', 3),\n",
+ " ('alexis', 3),\n",
+ " ('matched', 3),\n",
+ " ('attentive', 3),\n",
+ " ('interesting', 3),\n",
+ " ('giving', 3),\n",
+ " ('edge', 3),\n",
+ " ('indulge', 3),\n",
+ " ('loft', 3),\n",
+ " ('ceilings', 3),\n",
+ " ('them', 3),\n",
+ " ('elements', 3),\n",
+ " ('still', 3),\n",
+ " ('sit', 3),\n",
+ " ('outfitted', 3),\n",
+ " ('balconies', 3),\n",
+ " ('perks', 3),\n",
+ " ('gym', 3),\n",
+ " ('sunset', 3),\n",
+ " ('rock', 3),\n",
+ " ('fireplaces', 3),\n",
+ " ('kitchenette', 3),\n",
+ " ('bistro', 3),\n",
+ " ('fairmont', 3),\n",
+ " ('acclaimed', 3),\n",
+ " ('news', 3),\n",
+ " ('report', 3),\n",
+ " ('2018', 3),\n",
+ " ('shows', 3),\n",
+ " ('outdoors', 3),\n",
+ " ('fans', 3),\n",
+ " ('athletic', 3),\n",
+ " ('begin', 3),\n",
+ " ...]"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "words_freq = sorted(words_freq, key=lambda x:x[1],reverse=True) # 排序重复的次数\n",
+ "words_freq"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "这里重复最多的the我们并不是重要的信息词,后面我们需要进行怎样的优化呢"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_top_n_words(corpus, n=None):\n",
+ " # 获取某数据中最长出现的n个词\n",
+ " vec = CountVectorizer().fit(corpus) # 寄存器\n",
+ " bag_of_words = vec.transform(corpus) # 将文本转数值\n",
+ " sum_words = bag_of_words.sum(axis=0) # 计算每个词重复的次数\n",
+ " words_freq = [(word, sum_words[0,idx]) for word,idx in vec.vocabulary_.items()] # 得到词及对应出现的次数\n",
+ " words_freq = sorted(words_freq, key=lambda x:x[1],reverse=True) # 排序重复的次数\n",
+ " return words_freq[:n]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[('the', 1258),\n",
+ " ('and', 1062),\n",
+ " ('of', 536),\n",
+ " ('seattle', 533),\n",
+ " ('to', 471),\n",
+ " ('in', 449),\n",
+ " ('our', 359),\n",
+ " ('you', 304),\n",
+ " ('hotel', 295),\n",
+ " ('with', 280),\n",
+ " ('is', 271),\n",
+ " ('at', 231),\n",
+ " ('from', 224),\n",
+ " ('for', 216),\n",
+ " ('your', 186),\n",
+ " ('or', 161),\n",
+ " ('center', 151),\n",
+ " ('are', 136),\n",
+ " ('downtown', 133),\n",
+ " ('on', 129)]"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "common_words = get_top_n_words(df['desc'], 20)\n",
+ "common_words"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " desc | \n",
+ " count | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " the | \n",
+ " 1258 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " and | \n",
+ " 1062 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " of | \n",
+ " 536 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " seattle | \n",
+ " 533 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " to | \n",
+ " 471 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " desc count\n",
+ "0 the 1258\n",
+ "1 and 1062\n",
+ "2 of 536\n",
+ "3 seattle 533\n",
+ "4 to 471"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_common_words = pd.DataFrame(common_words, columns=['desc', 'count'])\n",
+ "df_common_words.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Text(0.5, 1.0, 'top 20')"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.barh(df_common_words['desc'], df_common_words['count'])\n",
+ "plt.xlabel('count')\n",
+ "plt.ylabel('words')\n",
+ "plt.title('top 20')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "可以看到top20大多数是无关紧要的词"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_top_n_words(corpus, n=None):\n",
+ " # 获取某数据中最长出现的n个词,并增加停用词过滤\n",
+ " vec = CountVectorizer(stop_words='english').fit(corpus) # 增加停用词,即自动过滤掉某些字或词\n",
+ " bag_of_words = vec.transform(corpus)\n",
+ " sum_words = bag_of_words.sum(axis=0)\n",
+ " words_freq = [(word, sum_words[0,idx]) for word,idx in vec.vocabulary_.items()] # 得到词及对应出现的次数\n",
+ " words_freq = sorted(words_freq, key=lambda x:x[1],reverse=True)\n",
+ " return words_freq[:n]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " desc | \n",
+ " count | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " seattle | \n",
+ " 533 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " hotel | \n",
+ " 295 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " center | \n",
+ " 151 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " downtown | \n",
+ " 133 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " free | \n",
+ " 123 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " desc count\n",
+ "0 seattle 533\n",
+ "1 hotel 295\n",
+ "2 center 151\n",
+ "3 downtown 133\n",
+ "4 free 123"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "common_words = get_top_n_words(df['desc'], 20)\n",
+ "df_common_words = pd.DataFrame(common_words, columns=['desc', 'count'])\n",
+ "df_common_words.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Text(0.5, 1.0, 'top 20')"
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.barh(df_common_words['desc'], df_common_words['count'])\n",
+ "plt.xlabel('count')\n",
+ "plt.ylabel('words')\n",
+ "plt.title('top 20')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "可以看到这次的top 20清晰了很多,如最多的seattle、hotle、center等,这里还是一个词一个词去分的,词组起来连贯后意思会不同,如在机场的便利店附近的酒店,这个酒店除了在便利店附近,还得是机场附近。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_top_n_words(corpus, n=None):\n",
+ " # 获取某数据中最长出现的n个词,并增加停用词,增加连贯词\n",
+ " vec = CountVectorizer(stop_words='english',ngram_range=(2,2)).fit(corpus) # 增加两次词连贯的\n",
+ " bag_of_words = vec.transform(corpus)\n",
+ " sum_words = bag_of_words.sum(axis=0)\n",
+ " words_freq = [(word, sum_words[0,idx]) for word,idx in vec.vocabulary_.items()] # 得到词及对应出现的次数\n",
+ " words_freq = sorted(words_freq, key=lambda x:x[1],reverse=True)\n",
+ " return words_freq[:n]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Text(0.5, 1.0, 'top 20')"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "common_words = get_top_n_words(df['desc'], 20)\n",
+ "df_common_words = pd.DataFrame(common_words, columns=['desc', 'count'])\n",
+ "plt.barh(df_common_words['desc'], df_common_words['count'])\n",
+ "plt.xlabel('count')\n",
+ "plt.ylabel('words')\n",
+ "plt.title('top 20')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "这样所有的词都连起来了,第一个词Pike Place是西雅图的一个广场、以及wifi等关键字眼。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "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.7.3"
+ }
+ },
"nbformat": 4,
"nbformat_minor": 2
}
diff --git a/机器学习竞赛实战_优胜解决方案/基于相似度的酒店推荐系统/酒店推荐.ipynb b/机器学习竞赛实战_优胜解决方案/基于相似度的酒店推荐系统/酒店推荐.ipynb
index 64d22dd..4c5ff63 100644
--- a/机器学习竞赛实战_优胜解决方案/基于相似度的酒店推荐系统/酒店推荐.ipynb
+++ b/机器学习竞赛实战_优胜解决方案/基于相似度的酒店推荐系统/酒店推荐.ipynb
@@ -12,23 +12,9 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 26,
"metadata": {},
"outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "D:\\Anaconda3\\lib\\importlib\\_bootstrap.py:219: RuntimeWarning:\n",
- "\n",
- "numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
- "\n",
- "D:\\Anaconda3\\lib\\importlib\\_bootstrap.py:219: RuntimeWarning:\n",
- "\n",
- "numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
- "\n"
- ]
- },
{
"data": {
"text/html": [
@@ -64,6 +50,7 @@
"import re\n",
"import random\n",
"import cufflinks # pip install cufflinks\n",
+ "import matplotlib.pyplot as plt\n",
"from plotly.offline import iplot\n",
"cufflinks.go_offline()"
]
@@ -163,7 +150,7 @@
}
],
"source": [
- "df = pd.read_csv(\"data/Seattle_Hotels.csv\", encoding=\"latin-1\")\n",
+ "df = pd.read_csv(\"data/Seattle_Hotels.csv\", encoding=\"latin-1\") # 西雅图酒店推荐数据\n",
"df.head()"
]
},
@@ -2348,6 +2335,383 @@
"这里重复最多的the我们并不是重要的信息词,后面我们需要进行怎样的优化呢"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_top_n_words(corpus, n=None):\n",
+ " # 获取某数据中最长出现的n个词\n",
+ " vec = CountVectorizer().fit(corpus) # 寄存器\n",
+ " bag_of_words = vec.transform(corpus) # 将文本转数值\n",
+ " sum_words = bag_of_words.sum(axis=0) # 计算每个词重复的次数\n",
+ " words_freq = [(word, sum_words[0,idx]) for word,idx in vec.vocabulary_.items()] # 得到词及对应出现的次数\n",
+ " words_freq = sorted(words_freq, key=lambda x:x[1],reverse=True) # 排序重复的次数\n",
+ " return words_freq[:n]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[('the', 1258),\n",
+ " ('and', 1062),\n",
+ " ('of', 536),\n",
+ " ('seattle', 533),\n",
+ " ('to', 471),\n",
+ " ('in', 449),\n",
+ " ('our', 359),\n",
+ " ('you', 304),\n",
+ " ('hotel', 295),\n",
+ " ('with', 280),\n",
+ " ('is', 271),\n",
+ " ('at', 231),\n",
+ " ('from', 224),\n",
+ " ('for', 216),\n",
+ " ('your', 186),\n",
+ " ('or', 161),\n",
+ " ('center', 151),\n",
+ " ('are', 136),\n",
+ " ('downtown', 133),\n",
+ " ('on', 129)]"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "common_words = get_top_n_words(df['desc'], 20)\n",
+ "common_words"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " desc | \n",
+ " count | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " the | \n",
+ " 1258 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " and | \n",
+ " 1062 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " of | \n",
+ " 536 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " seattle | \n",
+ " 533 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " to | \n",
+ " 471 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " desc count\n",
+ "0 the 1258\n",
+ "1 and 1062\n",
+ "2 of 536\n",
+ "3 seattle 533\n",
+ "4 to 471"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_common_words = pd.DataFrame(common_words, columns=['desc', 'count'])\n",
+ "df_common_words.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Text(0.5, 1.0, 'top 20')"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.barh(df_common_words['desc'], df_common_words['count'])\n",
+ "plt.xlabel('count')\n",
+ "plt.ylabel('words')\n",
+ "plt.title('top 20')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "可以看到top20大多数是无关紧要的词"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_top_n_words(corpus, n=None):\n",
+ " # 获取某数据中最长出现的n个词,并增加停用词过滤\n",
+ " vec = CountVectorizer(stop_words='english').fit(corpus) # 增加停用词,即自动过滤掉某些字或词\n",
+ " bag_of_words = vec.transform(corpus)\n",
+ " sum_words = bag_of_words.sum(axis=0)\n",
+ " words_freq = [(word, sum_words[0,idx]) for word,idx in vec.vocabulary_.items()] # 得到词及对应出现的次数\n",
+ " words_freq = sorted(words_freq, key=lambda x:x[1],reverse=True)\n",
+ " return words_freq[:n]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " desc | \n",
+ " count | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " seattle | \n",
+ " 533 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " hotel | \n",
+ " 295 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " center | \n",
+ " 151 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " downtown | \n",
+ " 133 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " free | \n",
+ " 123 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " desc count\n",
+ "0 seattle 533\n",
+ "1 hotel 295\n",
+ "2 center 151\n",
+ "3 downtown 133\n",
+ "4 free 123"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "common_words = get_top_n_words(df['desc'], 20)\n",
+ "df_common_words = pd.DataFrame(common_words, columns=['desc', 'count'])\n",
+ "df_common_words.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Text(0.5, 1.0, 'top 20')"
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.barh(df_common_words['desc'], df_common_words['count'])\n",
+ "plt.xlabel('count')\n",
+ "plt.ylabel('words')\n",
+ "plt.title('top 20')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "可以看到这次的top 20清晰了很多,如最多的seattle、hotle、center等,这里还是一个词一个词去分的,词组起来连贯后意思会不同,如在机场的便利店附近的酒店,这个酒店除了在便利店附近,还得是机场附近。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_top_n_words(corpus, n=None):\n",
+ " # 获取某数据中最长出现的n个词,并增加停用词,增加连贯词\n",
+ " vec = CountVectorizer(stop_words='english',ngram_range=(2,2)).fit(corpus) # 增加两次词连贯的\n",
+ " bag_of_words = vec.transform(corpus)\n",
+ " sum_words = bag_of_words.sum(axis=0)\n",
+ " words_freq = [(word, sum_words[0,idx]) for word,idx in vec.vocabulary_.items()] # 得到词及对应出现的次数\n",
+ " words_freq = sorted(words_freq, key=lambda x:x[1],reverse=True)\n",
+ " return words_freq[:n]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Text(0.5, 1.0, 'top 20')"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "common_words = get_top_n_words(df['desc'], 20)\n",
+ "df_common_words = pd.DataFrame(common_words, columns=['desc', 'count'])\n",
+ "plt.barh(df_common_words['desc'], df_common_words['count'])\n",
+ "plt.xlabel('count')\n",
+ "plt.ylabel('words')\n",
+ "plt.title('top 20')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "这样所有的词都连起来了,第一个词Pike Place是西雅图的一个广场、以及wifi等关键字眼。"
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,