2012-05-11 95 views
0

我有來自醫療部門的「chunked」句子的文件。在特殊字符之前只能得到一個字

句子看起來像:

「[ADVP再次/ RB] [VP看出/ VBN] [NP是/ VBZ] [NP一個/ DT焦/ JJ 不對稱/ NN]

「[NP診斷/ JJ乳房X線照片/ NN] [PP// IN] [NP/DT左/ JJ 乳房/ NN]。

我需要從這些「塊」中只提取單詞的方法。所有句子的通用規則是這些單詞出現在'/'字符之前。

是否有選擇組合REGEX或其他的東西來獲得沒有POS的字符串?

感謝

回答

1

這似乎工作:

var patt = @"\s(\b(.+?))/"; 
var matches = Regex.Matches("[ADVP again/RB ] [VP seen/VBN ] [NP is/VBZ ] [NP a/DT focal/JJ asymmetry/NN ].", patt); 

var matchedValues = matches 
    .Cast<Match>() 
    .Select(match => match.Groups[1].Value); 

var output = string.Join(" ", matchedValues); 

=> 「再次看到的是焦點不對稱」

+0

謝謝!偉大的作品! – AlexBerd

0

您正在搜索再次匹配 一個正則表達式,看到是,一,對稱 和 診斷,mammogramm,的,的,左乳房

,對嗎?

則.../\ B([\ W] +)//應該工作

+0

是我搜索正則表達式,將第一句轉換爲簡單的字符串,其中包含: 再次看到的是焦點對稱性。 – AlexBerd

3

查找此正則表達式的所有字符。

\w+(?=/) 

我測試了它在RegexPal.com。像魅力一樣工作。

該正則表達式非常簡單。它匹配單詞(\w+),後跟/而不使/部分匹配。這消除了處理捕獲組等的需要。它與(?=/)匹配,然後與立即跟隨的點匹配。這被稱爲lookahead

下面是一些示例代碼:

string sentence = "[ADVP again/RB ] [VP seen/VBN ] [NP is/VBZ ] [NP a/DT focal/JJ asymmetry/NN ]."; 
MatchCollection matches = Regex.Matches(sentence, @"\w+(?=/)"); 
foreach (Match match in matches) 
{ 
    Console.WriteLine(match.Value); 
} 

輸出:

again 
seen 
is 
a 
focal 
asymmetry 
0

試試這個。

var val = "[ADVP again/RB ] [VP seen/VBN ] [NP is/VBZ ] [NP a/DT focal/JJ asymmetry/NN ]";  
var list = val.Split('/').Select(c => c.Split(' ').Last()); 
相關問題