国会记录中的姓名匹配

时间:2013-06-20 15:58:45

标签: regex r web-scraping

我正在尝试使用正则表达式来识别国会记录中使用的特定命名约定。

国会记录中的演讲总是以发言人的名字开头。例如,这是一段摘录:

  

先生。加州多尔南。议长先生,我打算屈服于我的   朋友,但我有问题。情报委员会正在召开会议。

     

我可以请这位先生耐心等待15分钟   并观看?

     

先生。特。如果绅士能给我6个   分钟。

     

先生。加州多尔南。绅士可以4点做吗?

     

先生。演讲者,我向宾夕法尼亚州的绅士屈服[先生de la CRUZ]。

     

先生。 de la CRUZ。 blah blah blah

     

女士。华盛顿的McCORMICK。

国会记录中使用的命名惯例是以标题(先生,夫人,女士)开头,后跟姓氏(全部上限)。在某些情况下,姓氏后面跟着州(如加利福尼亚州的DORNAN先生)。

简而言之,正则表达式应匹配具有以下条件的字符串:

  1. 在字符串的开头找(先生,夫人或女士)。
  2. (很少)这可能会跟着一些小写单词(如'de la CRUZ'示例中所示)。
  3. 在所有(或大多数情况下,如McCORMICK示例中)查找名称
  4. (在某些情况下)名称后面会跟'[州名]'
  5. 在一段时间内结束。
  6. 第一个很容易用^(Mr. | Mrs. | Ms。)

    完成

    但其余部分让我陷入困境。

2 个答案:

答案 0 :(得分:1)

以下内容如何:

^((?:Mr\.|Mrs\.|Ms\.) [^.]*[A-Z]{2,})(?:(?: of )([^.]*)){0,1}\.

请参阅http://rubular.com/r/RWs7k9f0pd

答案 1 :(得分:1)

不完美,但我认为这是一个好的开始:

regmatches(xx,gregexpr('^((Mr|Mrs|Ms)[.][^.]*)[.]',xx))

[[1]]
[1] "Mr. DORNAN of California."
[[2]]
character(0)
[[3]]
[1] "Mr. RITTER."
[[4]]
[1] "Mr. DORNAN of California."
[[5]]
[1] "Mr. Speaker, I yield to the gentleman from Pennsylvania [Mr."
[[6]]
[1] "Mr. de la CRUZ."
[[7]]
[1] "Ms. McCORMICK of Washington."

xx的位置:

xx <- c("Mr. DORNAN of California. Mr. Speaker, I was going to yield to my friend, but I have a problem. The Intelligence Committee is convening.",
"Could I ask the gentleman to be patient because of that for 15 minutes and watch?",
"Mr. RITTER. If the gentleman could give me just 6 minutes.",
"Mr. DORNAN of California. Can the gentleman do it in 4?",
"Mr. Speaker, I yield to the gentleman from Pennsylvania [Mr. de la CRUZ].",
"Mr. de la CRUZ. blah blah blah",
"Ms. McCORMICK of Washington.")