2017-08-11 67 views
0

我想保留帶有標籤NA的單詞。如果不止一個這樣的單詞聚集在一起,我想把它們合併成一個單詞。獲得一個特定的標籤和組合,如果一起發現多個相同的標籤

例子:

%if i have 
a='[The/D, handle/NA, of/NS, the/NaAq, hair/NA, brush/NA, is/NaAZ broken/A]' 
% the output I want: 
output={'handle', 'hair brush'} 

我試圖尋找/NA但問題是,有誤報其爲theis

目前我的代碼是:

g=split(a(2:end-1)); 
b= strfind(g,'/NA'); 
g(~cellfun(@isempty, b)) 

任何想法如何進行呢?如果可能,任何單行正則表達式都會非常有幫助。

+0

只是爲了確保:你想'output = {'handle','hair brush'}'或'output = {'handle','hair','brush'}'? –

+0

@WiktorStribiżew第一個。如果有多個這樣的單詞在一起,我想合併它們 – Likeunknown

+0

我只能用正則表達式考慮的方法是用'\ w +/NA \ b(,\ s * \ w +/NA \ b)*提取所有子字符串'然後從所有找到的匹配中刪除'/ NA,?'。 –

回答

1

看起來像一個很好的NLP問題。也許這會讓你開始:

a='[The/D, handle/NA, of/NS, the/NaAq, hair/NA, brush/NA, is/NaAZ broken/A]'; 
output={'handle', 'hair brush'}; 

expr = '(\S+/NA,)+';      % look for words followed by '/NA, ' 
match = regexp(a,expr,'match'); 
output = strtrim(strrep(match,'/NA,','')) % strrep: get rid of tag - strtrim: get rid of tailing blank 

請注意,如果最後一個單詞標記爲/ NA,則此方法將失敗。儘管你可以獨立地理解這個案例。