0

我正在努力通过提供或寻求、出发地和目的地以及日期和时间来对来自拼车 Facebook 群组的帖子进行分类。人们会发布如下内容:

提供:从旧金山到西南拉(托伦斯)在这个星期四晚上 6 点或 7 点左右离开,也就是明天


提供:SFO--->LA(比佛利山庄地区)星期四上午 9 点 30 美元汽油

使用正则表达式我清理文本:

从旧金山到西南拉托伦斯的产品在这个星期四晚上 6 点或 7 点左右离开,也就是明天


周四上午 9 点 30 分向贝弗利山地区提供 sfo

然后我将新清理的帖子存储在 mysql 数据库中。

有人建议我在为朴素贝叶斯创建训练集之前删除位置并用元词替换它们(欢迎提出其他算法的建议)。我检查地点,例如 ucla(包括城市和县的缩写,例如“sf”)、城市和县。我想使用 Python 的 NLTK 库来删除位置,用元词替换,同时仍然跟踪哪个位置对应于哪个元词。

#check if post contains a city name
#param post is an array containing post_id and post text
def checkForCities(con,post):
            cur = con.cursor()
            cur.execute("SELECT id,city FROM CITIES;")
            #keep track of number of locations found as all locations are represented by the same word
            location_num = 0
            clean_post = post[1]
            for i in range(cur.rowcount):
                row = cur.fetchone()
                if clean_post.find(row[1].lower()) != -1:
                 #using replace instead of regex..not sure which is better...
                 new_post  = new_post.replace(row[1].lower(),'LOCATION_NAME')
                 location_num+=1
                 insertNewPostIntoLocationTable(con,post[0],new_post,row[0],location_num,Locations.Cities)
return new_post

使用上面的代码(未显示 checkForPlaces 函数,但实际上是相同的),第二个帖子将变为:

周四上午 9 点 30 分向 LOCATION LOCATION 地区提供 LOCATION。

跟踪第一个位置对应于 sfo,第二个对应于 la,第三个对应于比佛利山庄。

  1. 如您所见,sf 是旧金山的缩写。当我在将文本放入数据库之前第一次清理文本时,我应该用 SF 替换所有旧金山实例还是用旧金山替换所有 SF 实例?我目前正在做前者,因为我经常错误地替换缩写词(也许我的正则表达式只需要工作?)。
  2. 或者,如果我可以创建一个所有城市的列表并让一些 NLTK 函数告诉我帖子中是否存在城市或缩写,那会容易得多。这样的事情存在吗?奖励问题:如何解析日期和时间(它们以各种可以想象的格式出现)?

您可以在此处找到更多示例帖子

4

0 回答 0