2017-03-06 47 views
-2

我需要在字符串中的某個單詞的任一側提取上下文單詞。在這種情況下,特定的單詞屬於字符串中的專有名詞。例如。在句子的某個單詞的任一側獲取n個單詞

我喜歡瑪莎的蛋糕,因爲它們太好吃了!

在這種情況下,瑪莎是一個專有名詞,我想提取瑪莎任何一方的4個詞,以便能夠將瑪莎分類爲名稱,地點或組織。在這種情況下,烘焙是我的線索,Marth是一個人。我正在查看4的窗口大小,但是在目標單詞兩側少於4個單詞的情況下或者如果它是句子的第一個單詞怎麼辦?

所以基本上:

  1. 我想獲得對目標詞的兩側4個字。
  2. 將它們放在兩個單獨的列表中,分別稱爲leftWords和rightWords
  3. 檢查是否少於4個單詞,然後減小窗口大小並獲取任意一側可用的任意數量的單詞。
+2

你有任何實際的代碼? –

+2

請提供您到目前爲止所嘗試的內容,SO不是一項編碼服務。 –

+0

@TimBiegeleisen我確實有代碼,但我目前的做法是使用nlp工具從句子中獲取塊,並從塊中獲取上下文單詞。但在大多數情況下,我意識到專有名詞會分裂成自己的大塊,因此沒有任何語境詞彙。所以我決定嘗試使用窗口從整個句子中提取上下文單詞。所以我真的沒有有效的代碼來分享。對於那個很抱歉。只是關於如何使窗口靈活的想法就可以做到。 – serendipity

回答

1

我假設你有相關專有名稱的開始和結束索引(在I love the cakes Martha bakes as they are so delicious!的情況下,我認爲它們將是17和23)。

建議您在兩個子字符串中取出正確名稱前後的句子部分,然後使用正則表達式來匹配所需的單詞數。在我們的示例中,Martha之前的子字符串是I love the cakes,而正則表達式\S+(\s+\S+){0,3}\s*$將在該子字符串的末尾匹配最多四個由空白分隔的單詞(在這種情況下,它將是整個字符串,但如果有更多單詞,它只會是最後四個)。您必須從所需數量的字中減去1,並在表達式中填入3的結果。

我相信你對名稱後面的單詞采用類似的方式。

相關問題