0

我有来自医疗部门的“分块”句子的文件。

句子看起来像:

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

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

我需要从那些“块”中只提取单词的方法。所有句子的共同规则是单词在 '/' 字符之前。

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

谢谢

4

4 回答 4

3

查找此正则表达式的所有匹配项。

\w+(?=/)

我在RegexPal.com对其进行了测试。像魅力一样工作。

正则表达式非常简单。它匹配单词 ( \w+) 后跟 a/而不进行/匹配部分。这消除了处理捕获组等的需要。它与 'followed by' 匹配(?=/),本质上匹配紧随其后的点 a /。这称为前瞻

这是一些示例代码:

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
于 2012-05-11T12:12:02.733 回答
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);

=>“再次看到的是焦点不对称”

于 2012-05-11T11:57:51.097 回答
0

您正在再次搜索 RegEx 匹配,已看到,是,a,对称性和诊断性,乳房 X 光检查,of,the,left,breast

对?

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

于 2012-05-11T11:42:01.137 回答
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());
于 2012-05-11T12:12:18.490 回答