2015-04-30 56 views
0

我做了分級詞典搜索,我必須把內容到一個名爲「內容」變量:如何從內容變量中提取摘錄?

def look_through(d, s): 
    r = [] 
    content = readFile(d["path"]) 

    if s in content: 
     if "phrase" not in d: 
      d["phrase"] = [s] 
     else: 
      d["phrase"].append(s) 
     r.append({"content": content, "phrase": d["phrase"], "name": d["name"]}) 
    for b in d["decendent"] or []: 
      r += look_through(b, s) 
    return r 

但「內容」應該是從文本的exceprt,不完整內容,即來自後面的幾個詞和搜索詞組前面的幾個詞。

如:

一句話: 「尋找

內容:......她他......

如何裁剪內容在一個功能爲了達到這個結果? 謝謝!

+0

https://docs.python.org/2/library/re.html#module-re –

回答

0

你的問題是,所有你知道的是,s in content - 換句話說,你知道該字符串是在那裏地方,但你需要知道哪裏來獲取上下文。

只需使用content.find(s)代替,你就會有一個:

pos = content.find(s) 
if pos != -1: 
    if "phrase" not in d: 
     # etc. 

現在,找到「幾個字後面」,只落後了幾個單詞分隔符從pos搜索,並找到「一兩句話向前搜索「,從pos + len(s)前面搜索幾個字詞分隔符。

當然,你必須定義「幾個」的含義,以及什麼構成一個詞分隔符,但你應該能夠從這裏解決其餘的問題。 (請確保您在文檔中看到rfind以及find,並查看這兩種方法的所有參數,並且不要忘記處理在content的開始或結尾附近找到s的邊緣情況。)

最後一面說明:你確定s in content(和等效的content.find(s))真的是你想要的嗎?例如,如果我搜索「唱歌」,是否應該在「明星失去外層」中找到?

+0

問題是,在我的情況下,所需的單詞可以在一個內容中多次找到。所以我必須尋找這個詞的幾個匹配。 – paus

+0

@paus:沒關係。看看'find'的其他參數,應該很明顯的是如何尋找額外的匹配。 – abarnert

+0

我不知道,pos = content.find(s)是我的情況的一個合適的解決方案,因爲單詞可以改變它們的形式,所以我需要使用pymorphy2和find()函數。 – paus