在特殊字符之前获取单词

时间:2012-05-11 11:38:02

标签: c# regex string nlp

我的医疗部门有“chunked”句子。

句子如下:

  

“[ADVP再次/ RB] [VP见/ VBN] [NP是/ VBZ] [NP a / DT焦点/ JJ   不对称/ NN]。

     

“[NP诊断/ JJ乳房X线照片/ NN] [PP / IN] [NP / DT左/ JJ   乳房/ NN]。

我需要从那些“块”中仅提取单词的方法。所有句子的通用规则是单词出现在'/'char。

之前

是否有选项可以组合REGEX或其他东西以获得没有POS的字符串?

由于

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);

=&GT; “再次看到的是焦点不对称”

答案 2 :(得分:0)

您正在搜索RegEx匹配 再次,看,是,a,对称性 和 诊断,乳房,乳房,左,乳房

右?

然后...... / \ b([\ w] +)//应该工作

答案 3 :(得分: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());