iT邦幫忙

1

Python pandas 字串比對問題

  • 分享至 

  • xImage

HI 大家好,小弟Python新手,請各位先進指導。感謝!!

問題: 目前有兩個由爬蟲抓下來的資料,一個是電影名稱'MovieTitle.csv'
一個是Ptt Movie版討論串'PttComment.csv', 如下圖:
MovieTitle.csv
https://ithelp.ithome.com.tw/upload/images/20200930/20107444yB8ZFrZZ6h.jpg
PttComment.csv
https://ithelp.ithome.com.tw/upload/images/20200930/20107444rip4ArX9e1.jpg
做字串比對使用.str.contains方法 程式碼如下:

  `import pandas as pd
   # 匯入 PttComment
   movies = pd.read_csv("PttComment.csv").dropna(how='all')
   movies["title"] = movies["title"].astype("category")
   # 匯入 MovieTitle
   titles = pd.read_csv("MovieTitle.csv")
   key_word = titles.iloc[:, 7]
   
   newDF = pd.DataFrame() # 新增DataFrame 儲存結果
   
   for key in key_word:
        mask = movies["title"].str.contains(key) # 字串比對
        movies["key_word"] = key  # 新增欄位把找到的keyword標記上去
        newDF = newDF.append(movies[mask], ignore_index=True)
       
   newDF.to_csv('newdata.csv', index=False) # 匯出新資料
   `
   

結果如下圖:
https://ithelp.ithome.com.tw/upload/images/20200930/20107444x4DwB4lupE.jpg
問題:
想請問各位大大,目前這做法跟方向是對的嗎?
還是爬蟲工具就可以做到資料比對了? (我是使用Scrapy)
Pandas有其他更好的方法可以做到嗎? (假如在資料量大的時候)
另外如果想去計算'負雷'跟'好雷'的次數該怎麼做呢?
如果程式碼有誤還請各位大大不吝指教!!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
japhenchen
iT邦超人 1 級 ‧ 2020-09-30 14:06:50

排除掉漢字比對會出現不相關字詞或習慣字尾,你用包含contains或 movietitle in pptsubject的方式,應該是沒有問題,但如果有人在ptt的文章標頭打 [好雷]消失情人節,但你的電影清單裡卻只有【消失的情人節】,那上述兩種比對方式,會出現無法符合的狀況

我的解決方案是用中文分詞,我選pyjieba結巴,把movie title跟ppt subject都解成動詞名詞主詞,比對時準確度可以得到提升...不過這個議題會很漫長,有興趣再議
https://pypi.org/project/pyjieba/

另一方案就是動用機器學習,這又是另一個領域的事了

簡單講,當 == equal contains in 都難以成真時,也不會有辦法用re.search match 做正則比對,那只有用soundlike的方式做模糊比對甚至是詞意分析來比對,中文的世界,水很深....

0
lingoo21
iT邦新手 5 級 ‧ 2020-10-04 00:05:15

用contains比沒什麼問題
不過應該不用建一個新的df來存結果
直接用mask來filter 給值就可以
雷數應該也可以用正則式的方法處理
方便給個範例檔玩玩嗎??

資料沒有個千萬筆 用純panda應該都不是問題
外國人的經驗
https://www.quora.com/Can-Python-Pandas-handle-10-million-rows-What-are-some-useful-techniques-to-work-with-the-large-data-frames

我要發表回答

立即登入回答