使用pandas从文本中确定上下文

时间:2016-11-30 09:22:40

标签: python pandas nltk text-analysis

我已经构建了一个抓取数据的网络抓取工具。数据通常是结构化的。但是后来又有一些异常现象。现在要在数据之上进行分析,我正在搜索几个单词,searched_words=['word1','word2','word3'......]我想要这些单词存在的句子。所以我编码如下:

searched_words=['word1','word2','word3'......]

fsa = re.compile('|'.join(re.escape(w.lower()) for w in searched_words))
str_df['context'] = str_df['text'].apply(lambda text: [sent for sent in     sent_tokenize(text)
if any(True for w in word_tokenize(sent) if w.lower() in words)])

它正在发挥作用,但我面临的问题是,如果在文本中有一个完整的停止后有/缺少空格我会得到所有这样的句子。

示例:

searched_words = ['snakes','venomous']
text = "I am afraid of snakes.I hate them."
output : ['I am afraid of snakes.I hate them.']
Desired output : ['I am afraid of snakes.']

1 个答案:

答案 0 :(得分:1)

如果所有令牌系统(包括nltk)都失败了你可以自己动手并尝试

import re
s='I am afraid of snakes.I hate venomous them. Theyre venomous.'
def findall(s,p):
  return [m.start() for m in re.finditer(p, s)]

def find(sent, word):
  res=[]
  indexes = findall(sent,word)

  for index in indexes:
    i = index
    while i>0:
      if sent[i]!='.':
        i-=1
      else:
        break
    end = index+len(word)

    nextFullStop = end + sent[end:].find('.')

    res.append(sent[i:nextFullStop])
    i=0
  return res

使用它here。那里留下了一些点,因为我不知道你想要用它们做什么。

它的作用是找到所述单词的所有出现,并在你回到前一个点的过程中获得句子。这仅适用于边缘情况,但您可以根据需要轻松调整它。