2017-08-11 3 views
0

タグNAで単語を保持したい。そのような言葉が複数ある場合は、それらを1つの単語にまとめたいと思います。複数の同じタグが一緒に見つかった場合に特定のタグを取得して組み合わせる

例:

%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)) 

任意のアイデアをどう進めますか?可能であれば、1行の正規表現は非常に役に立ちます。

+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というタグが付いていると、この方法は失敗します。あなたは独立してそのケースを捕まえることができます。

関連する問題