????隨著大數(shù)據(jù)時(shí)代的到來(lái)瞳步,如何篩選以及獲取有效信息成為了一項(xiàng)重要的技能劣坊,通過(guò)使用爬蟲(chóng)按照一種規(guī)則自動(dòng)從萬(wàn)維網(wǎng)篩選信息已經(jīng)成為一種重要的能力测蘑,本次實(shí)驗(yàn)的目的就是通過(guò)工程實(shí)踐加深對(duì)理論知識(shí)的深入理解和綜合應(yīng)用,進(jìn)一步提高實(shí)踐動(dòng)手能力。
????(1)首先對(duì)python環(huán)境的安裝以及美團(tuán)商家信息的爬取,所爬取的商家信息為商家的id、商家名、平均得分梨熙、地址、平均價(jià)格、獲得評(píng)論總數(shù)怎憋,得到的結(jié)果保存在csv文件之中铸鹰,然后通過(guò)得到的商家的id構(gòu)造出可以獲取用戶(hù)評(píng)論的url,通過(guò)訪問(wèn)這個(gè)url,獲取這個(gè)商家的評(píng)論以及打分墅拭,存入到csv文件之中镀钓。
????(2)其次對(duì)第一個(gè)實(shí)驗(yàn)爬取到的評(píng)論數(shù)據(jù)按照評(píng)分進(jìn)行評(píng)論分類(lèi)探遵,得分大于30的為好評(píng)類(lèi),小于30的為差評(píng)類(lèi),我們?cè)诿缊F(tuán)上面爬取得到的評(píng)論和打分粟誓,最高為50分揽咕,將所有數(shù)據(jù)劃分為訓(xùn)練集和測(cè)試集,使用多種模型來(lái)進(jìn)行一個(gè)簡(jiǎn)單的中文情感分類(lèi),最后用測(cè)試集來(lái)檢測(cè)我們模型的泛化能力。
????(3)最后對(duì)每個(gè)商家的評(píng)論建立詞云,將多的詞展示出來(lái)。
對(duì)所需要操作進(jìn)行分析主要步驟可以分成兩個(gè)階段:
- 美團(tuán)評(píng)論數(shù)據(jù)的爬取
- 建立模型進(jìn)行分析
主要實(shí)驗(yàn)環(huán)境凭戴、配置、需要學(xué)習(xí)到的知識(shí):
(1)python2.7
(2)Bert中文預(yù)向量處理支持钞它、Jupyter
(3)php操灿、json相關(guān)知識(shí),所運(yùn)用到的一些包:requests救鲤、numpy入问、re棱烂、csv、pandas馁启、keras霉颠、json、urllib苍糠、os瞳筏、wordSegment钻心、word_cloud痒给、PIL棺棵、matplotlib
一缚柏、爬取美團(tuán)商家信息和評(píng)論數(shù)據(jù)
1.具體思路:
首先疙挺,確定爬取美團(tuán)—武漢美食的網(wǎng)站地址;
然后通過(guò)json得到請(qǐng)求的頁(yè)面信息,期間設(shè)置headers來(lái)進(jìn)行偽造請(qǐng)求术唬,避免被美團(tuán)頁(yè)面攔截驗(yàn)證粗仓;
再者,就是通過(guò)正則匹配找到要求我們?cè)陧?yè)面中爬取的內(nèi)容设捐;
最后借浊,遍歷各個(gè)頁(yè)面將需要信息爬取下來(lái)輸出保存在csv文檔之中扔仓。
在爬取評(píng)論內(nèi)容些己,得到每個(gè)商家評(píng)論和評(píng)分所在的json渤愁,我們通過(guò)正則表達(dá)式爬取需要的內(nèi)容然后存入csv文件中医寿,每個(gè)商家的評(píng)論和評(píng)分存在一個(gè)csv文件中,以該商家的poiId作為文件的名字羹令。
上述思路流程圖:
2.美團(tuán)商鋪爬取
????在商鋪爬取中闷尿,首先構(gòu)造武漢美團(tuán)的網(wǎng)站父虑,通過(guò)設(shè)置循環(huán)訪問(wèn)的頁(yè)數(shù)使用python進(jìn)行訪問(wèn):
for i in range(1,8):
url = 'https://wh.meituan.com/meishi/pn' + str(i) + '/'
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11' }
????在上述構(gòu)造訪問(wèn)美團(tuán)的url過(guò)程中母赵,我們需要設(shè)置header才能避免訪問(wèn)失敗逸爵,通過(guò)一個(gè)循環(huán)來(lái)對(duì)美團(tuán)的頁(yè)面進(jìn)行訪問(wèn),我們也可以設(shè)置多個(gè)頁(yè)數(shù)凹嘲,這里對(duì)商鋪的設(shè)置是爬取8頁(yè)信息,我當(dāng)時(shí)爬取的時(shí)候每頁(yè)有15家商鋪的信息构韵,8*15 = 120 家商鋪信息周蹭。
????當(dāng)get_info函數(shù)得到main函數(shù)傳給的wurl和headers的信息之后趋艘,通過(guò)python的requests.get得到url的信息然后存到一個(gè)response里面,通過(guò)python的正則來(lái)獲取response.text里面我們需要的關(guān)鍵點(diǎn)凶朗。
response = requests.get(url,headers = headers) # 獲取信息
poiId = re.findall(r'"poiId":(\d+),',response.text # 商家id
shopname = re.findall(r'"frontImg".*?title":(.*?)',response.text) # 商家名字
avgScore = re.findall(r'"avgScore":(.*?),'response.text) # 平均分
allCommentNum = re.findall(r'"allCommentNum":(\d+)',response.text) # 評(píng)論總數(shù)
address = re.findall(r'"address":(.*?),'response.text) # 商家地址
avgPrice = re.findall(r'"avgPrice":(\d+),'response.text) # 平均價(jià)格
????這里第一行代碼的目的是通過(guò)url瓷胧、headers對(duì)目標(biāo)構(gòu)造訪問(wèn)請(qǐng)求,接下來(lái)的代碼為通過(guò)正則表達(dá)式—findall對(duì)特征的內(nèi)容進(jìn)行爬取棚愤,從而得到需要的相應(yīng)信息搓萧,存到對(duì)應(yīng)的變量之中,這里的poiId宛畦、shopname瘸洛、avgScore、allCommentNum次和、address反肋、avgPrice都是list格式,里面有15個(gè)數(shù)據(jù)內(nèi)容踏施,因?yàn)榕廊∫豁?yè)美團(tuán)商家的頁(yè)面有15家商家石蔗,這在上面已經(jīng)提及,然后通過(guò)append函數(shù)添加到一個(gè)總的list之中畅形,構(gòu)成一行數(shù)據(jù)养距,然后返回包含15個(gè)商家信息數(shù)據(jù)的list。
????最后調(diào)用write_to_file函數(shù)將商家信息存到csv文件之中日熬,循環(huán)進(jìn)行8次铃在,以此爬取8個(gè)武漢美團(tuán)美食的商家頁(yè)面,總共105家商家信息碍遍。
3.商鋪評(píng)論爬取
????基于我們對(duì)商鋪的爬取獲得的poiId定铜,從第一個(gè)得到的csv文件之中獲取,這里通過(guò)使用python對(duì)于csv的操作函數(shù)就能夠?qū)崿F(xiàn)怕敬,簡(jiǎn)單的操作直接略過(guò)揣炕,得到poiId用來(lái)構(gòu)造訪問(wèn)評(píng)論信息所在的url。
def get_originUrl(self):
"""
構(gòu)造訪問(wèn)店鋪的url拼接东跪,這里返回的每個(gè)特定商家的網(wǎng)頁(yè)的開(kāi)頭部分畸陡,返回到調(diào)用該函數(shù)的地方,便于得到需要爬取該商家的url
"""
return parse.quote_plus('http://www.meituan.com/meishi/' + self.shop_id + '/')
然后通過(guò)對(duì)以下參數(shù)來(lái)確定得到評(píng)論和評(píng)分?jǐn)?shù)據(jù)所在的url地方
params = {
'platform': '1',
'partner': '126',
'originUrl': url_code,
'riskLevel': '1',
'optimusCode': '1',
'id': self.shop_id, # 我們?cè)O(shè)置的內(nèi)部poiId
'offset': '0',
'pageSize': '200', # 根據(jù)捕獲異常獲得評(píng)論數(shù)較多的量虽填,評(píng)論少就不要了
'sortType': '1',
}
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11' }
response = requests.get(url=url, params=params, headers=headers)
data = response.text
同樣是構(gòu)造一個(gè)header丁恭,通過(guò)requests.get帶有特定的參數(shù)訪問(wèn)url得到信息存入到data之中,data是一個(gè)str類(lèi)型的數(shù)據(jù)斋日。
data_dict = json.loads(data)
for item in data_dict.get('data').get('comments'):
with open(r'CommentData/{}.csv'.format(str(self.shop_id)), 'a', encoding='utf-8') as csvfile:
job_list = [item.get('comment'),item.get('star')]
write = csv.writer(csvfile)
write.writerow(job_list)
except TypeError:
pass
上面設(shè)置了一個(gè)捕獲異常的處理牲览,主要是因?yàn)樵谂廊≡u(píng)論的時(shí)候,一些評(píng)論為空或者其他類(lèi)型的錯(cuò)誤導(dǎo)的出錯(cuò)恶守,這里我們就pass掉第献,直接進(jìn)行下一條的爬取贡必。
二、建立模型對(duì)評(píng)論數(shù)據(jù)進(jìn)行分析
????一般思路是運(yùn)用樸素貝葉斯算法進(jìn)行文本分類(lèi)庸毫,分析實(shí)驗(yàn)說(shuō)明書(shū)提供給我網(wǎng)頁(yè)仔拟,成功實(shí)現(xiàn)使用樸素貝葉斯算法的文本分類(lèi),主要思路為對(duì)數(shù)據(jù)進(jìn)行處理飒赃,然后讀取利花,處理缺失的評(píng)論,然后重置索引载佳,對(duì)評(píng)論的特征進(jìn)行處理炒事,根據(jù)評(píng)分進(jìn)行分類(lèi),設(shè)置特征標(biāo)簽數(shù)組刚盈,分別為好的為1羡洛,壞的為0,然后引入樸素貝葉斯算法訓(xùn)練藕漱,通過(guò)jieba分詞將評(píng)論變?yōu)槎嘣~組并進(jìn)行向量化欲侮,然后加入一些停用詞處理,剔除一些分析之中的干擾詞肋联,然后實(shí)例化一個(gè)模型威蕉,通過(guò)管道把特征詞放進(jìn)行訓(xùn)練,通過(guò)交叉驗(yàn)證以及對(duì)測(cè)試集進(jìn)行測(cè)試橄仍,當(dāng)然韧涨,訓(xùn)練集和測(cè)試集都打亂,最后得到精確度為0.84002000000000006侮繁,也就是84%左右虑粥,我當(dāng)然不滿意這個(gè)實(shí)驗(yàn)結(jié)果。
????然后通過(guò)查詢(xún)資料宪哩,了解到Bert娩贷,決定想用Bert進(jìn)行實(shí)驗(yàn),查閱到的資料顯示Bert來(lái)做各種實(shí)驗(yàn)都是結(jié)果挺高的锁孟,于是打算使用bert來(lái)進(jìn)行彬祖,下面的思路主要就是面對(duì)Bert來(lái)寫(xiě)的,因?yàn)闃闼刎惾~斯方法我在上面也進(jìn)行了大致的描述品抽,也得到了結(jié)果储笑。
Bert中文向量分析思路描述:
????其實(shí),不管你用什么模型或者方法去進(jìn)行簡(jiǎn)單情感分類(lèi)的訓(xùn)練圆恤,他的大致流程其實(shí)和我在上面進(jìn)行的樸素貝葉斯方法差不多突倍,大致內(nèi)容都是數(shù)據(jù)預(yù)處理、標(biāo)識(shí)組設(shè)置—>評(píng)論數(shù)據(jù)打亂—>評(píng)論數(shù)據(jù)向量化—>輸入到模型之中—>訓(xùn)練—>驗(yàn)證—>得到結(jié)果這一個(gè)流程展開(kāi)的,使用Bert進(jìn)行分析也是這個(gè)流程赘方,只是很多細(xì)節(jié)不一樣罷了烧颖。
????在這里能夠使用Bert主要是感謝騰訊AI實(shí)驗(yàn)室所發(fā)布的bert-as-service接口弱左,通過(guò)這個(gè)接口窄陡,得到預(yù)訓(xùn)練好的bert模型生成的句向量和詞向量,不需要引入一些特征詞拆火,而是通過(guò)評(píng)論數(shù)據(jù)轉(zhuǎn)換得到的句向量經(jīng)過(guò)訓(xùn)練得到兩個(gè)好跳夭、壞模型然后進(jìn)行驗(yàn)證。但是主要的缺點(diǎn)就是跑得挺慢的们镜,我這里10000多條訓(xùn)練數(shù)據(jù)和1000多條驗(yàn)證數(shù)據(jù)在電腦上跑了大概20多分鐘币叹,還是功率全開(kāi)的那種,聲音特別響模狭、散熱一直在運(yùn)作颈抚,所以基本上我總共跑了2個(gè)樸素貝葉斯的模型,還有3個(gè)Bert的模型嚼鹉。
主要實(shí)現(xiàn)操作:
- 導(dǎo)入數(shù)據(jù)
- 對(duì)評(píng)論進(jìn)行過(guò)濾贩汉,只保留中文
- 構(gòu)建評(píng)論數(shù)據(jù)集合——訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)
- 創(chuàng)建評(píng)論數(shù)據(jù)好壞匹配標(biāo)簽組
- 隨機(jī)打亂評(píng)論
- 通過(guò)Bert-as-service得到數(shù)據(jù)中文詞向量
- 建立美團(tuán)評(píng)論情感分析模型
- 開(kāi)始訓(xùn)練
- 查看訓(xùn)練情況并將其可視化顯示
- 測(cè)試集進(jìn)行測(cè)試并得到模型驗(yàn)證結(jié)果
1.導(dǎo)入數(shù)據(jù)
good = pd.read_csv('N_good.csv') # 導(dǎo)入不同評(píng)論信息
bad = pd.read_csv('N_bad.csv')
comments_10 = good.comment
comments_20 = bad.comment
這里我就不贅述關(guān)于使用python對(duì)csv文件進(jìn)行數(shù)據(jù)處理的過(guò)程了,只需要知道使用python將爬取到的商家評(píng)論全都整合到一個(gè)csv文件之中锚赤,根據(jù)實(shí)驗(yàn)說(shuō)明書(shū)中匹舞,將評(píng)論評(píng)分大于30的視之為好評(píng)整合在N_good.csv文件之中,小于30的評(píng)論評(píng)分整合到N_bad.csv之中线脚,然后通過(guò)pandas庫(kù)導(dǎo)入赐稽。
2.對(duì)評(píng)論進(jìn)行過(guò)濾,只保留中文
for i in range(len(comments_10)): # 對(duì)好的評(píng)論進(jìn)行過(guò)濾
goodcom = comments_10.iloc[i]
try:
goodcom = re.sub("[^\u4E00-\u9FA5]","",goodcom)
if len(goodcom) > 2 and len(goodcom) < 100:
X_data1.append(goodcom)
except:
pass
for j in range(len(comments_20)): # 對(duì)壞的評(píng)論進(jìn)行過(guò)濾
badcom = comments_20.iloc[j]
try:
badcom = re.sub("[^\u4E00-\u9FA5]","",badcom)
if len(badcom) > 2 and len(badcom) < 100:
X_data2.append(badcom)
except:
pass
在這個(gè)階段浑侥,我們通過(guò)for循環(huán)姊舵,把每一行中的評(píng)論導(dǎo)入,使用正則表達(dá)式來(lái)過(guò)濾評(píng)論中的非中文字符寓落,s"[^\u4E00-\u9FA5]"
這里表示的是匹配中文字符的正則表達(dá)式括丁,然后放入到goodcom之中,最后我們篩選出字符長(zhǎng)度大于2且小于100的評(píng)論加入到好評(píng)集合之中,壞評(píng)集過(guò)程和好評(píng)一樣零如。
3.構(gòu)建評(píng)論數(shù)據(jù)集合——訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)
X_data = X_data1[:7000] + X_data2[:7000]
X_test_data = X_data1[7000:7900] + X_data2[7000:7900]
下面X_data是選出X_data1之后好的評(píng)論的前6000條和X_data2之后的壞的評(píng)論的7000條來(lái)組成訓(xùn)練躏将,X_test_data為測(cè)試集,選出X_data1和X_data2之中的各900條考蕾。
4.創(chuàng)建評(píng)論數(shù)據(jù)好壞匹配標(biāo)簽組
y_data = [1 for i in range(7000)] + [0 for i in range(7000)]
y_data = np.asarray(y_data, dtype=np.float32)
y_test_data = [1 for i in range(900)] + [0 for i in range(900)]
y_test_data = np.asarray(y_test_data, dtype=np.float32)
這里主要就是在得到訓(xùn)練數(shù)據(jù)之后祸憋,我們手工創(chuàng)建一個(gè)labels數(shù)組來(lái)作為訓(xùn)練標(biāo)簽,前7000個(gè)是好的評(píng)論我們?cè)O(shè)置為1肖卧,后7000個(gè)為壞的評(píng)論我們?cè)O(shè)置為0蚯窥,測(cè)試集同樣如此。
5.隨機(jī)打亂評(píng)論
nums = []
nums_ = []
X_train = []
Y_train = []
X_test = []
Y_test = []
nums = np.arange(14000)
np.random.shuffle(nums)
for i in nums:
X_train.append(X_data[i])
Y_train.append(y_data[i])
nums_ = np.arange(1800)
np.random.shuffle(nums_)
for i in nums_:
X_test.append(X_test_data[i])
Y_test.append(y_test_data[i])
借助numpy來(lái)對(duì)數(shù)據(jù)進(jìn)行隨機(jī)打亂,標(biāo)簽數(shù)組同樣與訓(xùn)練集拦赠、測(cè)試集應(yīng)著巍沙,用shuffle來(lái)隨機(jī)打亂訓(xùn)練集和測(cè)試集,標(biāo)簽數(shù)組對(duì)應(yīng)荷鼠,然后list轉(zhuǎn)換為numpy數(shù)組句携,后面模型輸入的需要是numpy的數(shù)據(jù)類(lèi)型。
6.通過(guò)Bert-as-service得到數(shù)據(jù)中文詞向量
bc = BertClient(ip = 'localhost')
input_train = bc.encode(X_train)
input_test = bc.encode(X_test)
這里是重點(diǎn)允乐,這行代碼將訓(xùn)練集和測(cè)試集進(jìn)行向量化矮嫉,每一行評(píng)論數(shù)據(jù)轉(zhuǎn)換為1768維的句向量*,通過(guò)在終端開(kāi)啟一個(gè)端口牍疏,并設(shè)置相應(yīng)線程來(lái)對(duì)輸入的評(píng)論數(shù)據(jù)進(jìn)行向量化轉(zhuǎn)換蠢笋,具體操作過(guò)程如下所示:
這里通過(guò)導(dǎo)入bert的中文預(yù)向量轉(zhuǎn)換模型的地址,然后設(shè)置工作的可以說(shuō)是線程數(shù)鳞陨,我這里設(shè)置的是4個(gè)線程昨寞。
中文預(yù)向量轉(zhuǎn)換模型在這里下載。
具體說(shuō)明如下所示:
這里厦滤,箭頭指的是下載的中文的Bert訓(xùn)練文件的位置援岩、進(jìn)行評(píng)論轉(zhuǎn)換的工作的線程數(shù)量,開(kāi)放的轉(zhuǎn)換的本地端口號(hào)馁害。下面為進(jìn)行訓(xùn)練的過(guò)程:
7.建立美團(tuán)評(píng)論情感分析模型
model = Sequential()
model.add(Dense(32, activation = 'relu', input_shape=(768,)))
model.add(Dropout(0.5))
model.add(Dense(32, activation = 'relu'))
model.add(Dense(1, activation = 'sigmoid'))
model.compile(
loss = 'binary_crossentropy',
optimizer = tf.train.AdamOptimizer(),
metrics = ['accuracy']
)
這里運(yùn)用了Keras來(lái)進(jìn)行建模窄俏,用的是Sequential類(lèi)來(lái)定義這個(gè)模型,然后模型使用Dense來(lái)進(jìn)行全連接層拼接碘菜,引入Dropout層來(lái)進(jìn)行部分?jǐn)?shù)據(jù)丟棄防止過(guò)擬合凹蜈,然后指定這個(gè)模型的優(yōu)化器和損失函數(shù),以及監(jiān)控的數(shù)據(jù)忍啸。
8.開(kāi)始訓(xùn)練
start = model.fit(
input_train, Y_train,
epochs = 30,
batch_size = 256,
validation_split = 0.2,
verbose = 1
)
這里迭代訓(xùn)練30個(gè)仰坦,使用訓(xùn)練集的20%來(lái)作為驗(yàn)證集,通過(guò)fit的方式將這些numpy形式的數(shù)組傳入到模型之中计雌,開(kāi)始訓(xùn)練:
9.查看訓(xùn)練情況并將其可視化顯示
# 將數(shù)據(jù)擬合和準(zhǔn)確率打印出來(lái)
import matplotlib.pyplot as plt
history_dict = history.history
epochs = range(1, len(history_dict['acc']) + 1)
plt.figure()
plt.plot(epochs, history_dict['acc'], 'b',label='acc')
plt.plot(epochs, history_dict['val_acc'], 'bo',label='val_acc')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.show()
plt.clf()
plt.figure()
plt.plot(epochs, history_dict['loss'], 'b', label='acc')
plt.plot(epochs, history_dict['val_loss'],'bo',label='val_acc')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()
上面兩個(gè)圖都在一定程度上顯示了我的訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)擬合度是很高的悄晃,訓(xùn)練集是有效的。
回憶了一下凿滤,我這里在jupyter能夠順利運(yùn)行妈橄,在vscode搭建的操作平臺(tái)下卻是顯示失敗的,主要是python里面的繪圖函數(shù)庫(kù)有問(wèn)題翁脆,我的解決方案是去使用Qt來(lái)進(jìn)行繪制眷蚓,mac下對(duì)于python繪圖主要為tk。
10.測(cè)試集進(jìn)行測(cè)試并得到模型驗(yàn)證結(jié)果
test_loss = model.evaluate(
input_test,Y_test,
batch_size = 64,
verbose = 1
)
print(test_loss) # 輸出測(cè)試信息
使用Bert進(jìn)行情感分類(lèi)反番,經(jīng)過(guò)模型訓(xùn)練之后沙热,使用測(cè)試集進(jìn)行測(cè)試叉钥,可以得到該精度達(dá)到了92.8%,訓(xùn)練損失為0.20篙贸。
三投队、繪制詞云
具體思路:
用jieba進(jìn)行分詞,還有python提供的wordcloud庫(kù)爵川。首先導(dǎo)入需要進(jìn)行分詞的文本敷鸦,然后用jieba將文本進(jìn)行分詞,返回分詞之后的結(jié)果雁芙,中文文本需要進(jìn)行分詞操作轧膘。然后就是設(shè)置顯示方式钞螟、生成詞云兔甘、將生成的詞云保存到本地,然后顯示出來(lái)鳞滨。
d = path.dirname(__file__)
tag = np.array(Image.open(path.join(d, "Images//head.jpg")))
font_path = path.join(d,"font//msyh.ttf")
stopwords = set(STOPWORDS)
wc = WordCloud(background_color="white", # 設(shè)置背景顏色
max_words = 2000, # 詞云顯示的最大詞數(shù)
mask = tag, # 設(shè)置背景圖片
stopwords = stopwords, # 設(shè)置停用詞
font_path=font_path, # 兼容中文字體洞焙,不然中文會(huì)顯示亂碼
)
# 生成詞云
wc.generate(text)
這里不想介紹了,突然發(fā)現(xiàn)寫(xiě)得挺多的拯啦,上面就是詞云構(gòu)建的關(guān)鍵代碼澡匪,通過(guò)設(shè)置各類(lèi)參數(shù)然后得到詞云,還可以引入不同的商家的信息進(jìn)行詞云建立褒链。