was_born_rules_sample.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. # -*- coding: utf-8 -*-
  2. from refo import Question, Star, Any, Plus
  3. from iepy.extraction.rules import rule, Token, Pos
  4. RELATION = "was born"
  5. @rule(True)
  6. def born_date_in_parenthesis(Subject, Object):
  7. """
  8. Ex: Gary Sykes (Born 13 February 1984) is a British super featherweight boxer.
  9. """
  10. anything = Star(Any())
  11. born = Star(Pos(":")) + Question(Token("Born") | Token("born")) + Question(Token("c."))
  12. entity_leftover = Star(Pos("NNP"))
  13. return Subject + entity_leftover + Pos("-LRB-") + born + Object + Pos("-RRB-") + anything
  14. @rule(True)
  15. def born_two_dates_in_parenthesis(Subject, Object):
  16. """
  17. Ex: James Cunningham (born 1973 or 1974) is a Canadian stand-up comedian and TV host.
  18. """
  19. anything = Star(Any())
  20. born = Question(Token("Born") | Token("born"))
  21. entity_leftover = Star(Pos("NNP"))
  22. subject = Subject + entity_leftover
  23. or_object = (Object + Token("or") + Pos("CD") |
  24. Pos("CD") + Token("or") + Object)
  25. return subject + Pos("-LRB-") + born + or_object + Pos("-RRB-") + anything
  26. @rule(True)
  27. def born_date_and_death_in_parenthesis(Subject, Object):
  28. """
  29. Ex: Carl Bridgewater (January 2, 1965 - September 19, 1978) was shot dead
  30. """
  31. anything = Star(Any())
  32. return Subject + Pos("-LRB-") + Object + Token("-") + anything + Pos("-RRB-") + anything
  33. @rule(True)
  34. def born_date_and_place_in_parenthesis(Subject, Object):
  35. """
  36. Ex: Gary Sykes (Born 13 February 1984) is a British super featherweight boxer.
  37. """
  38. anything = Star(Any())
  39. born = (Token("Born") | Token("born"))
  40. entity_leftover = Star(Pos("NNP"))
  41. place = Plus(Pos("NNP") + Question(Token(",")))
  42. return Subject + entity_leftover + Pos("-LRB-") + born + Object + Token(",") + place + Pos("-RRB-") + anything
  43. @rule(True)
  44. def was_born_explicit_mention(Subject, Object):
  45. """
  46. Ex: Shamsher M. Chowdhury was born in 1950.
  47. """
  48. anything = Star(Any())
  49. return anything + Subject + Token("was born") + Pos("IN") + Object + anything
  50. @rule(True)
  51. def is_born_in(Subject, Object):
  52. """
  53. Ex: Xu is born in 1902 or 1903 in a family of farmers in Hubei (China RRB)
  54. """
  55. anything = Star(Any())
  56. return Subject + Token("is born in") + Object + anything
  57. @rule(True)
  58. def mentions_real_name(Subject, Object):
  59. """
  60. Ex: Harry Pilling, born Ashtonunder-Lyne, Lancashire on 2 February 1943, played ...
  61. """
  62. anything = Star(Any())
  63. real_name = Plus(Pos("NNP") + Question(Token(",")))
  64. return Subject + Token("born") + real_name + Pos("IN") + Object + anything
  65. @rule(True)
  66. def was_born_and_mentions_place(Subject, Object):
  67. """
  68. Ex: Nasser Sharify was born in Tehran, Iran, in 1925.
  69. """
  70. place = Plus(Pos("NNP") + Question(Token(",")))
  71. return Subject + Token("was born") + Pos("IN") + place + Pos("IN") + Object + Question(Pos("."))
  72. @rule(True)
  73. def was_born_and_mentions_place_2(Subject, Object):
  74. """
  75. Ex: Theodone C. Hu was born in 1872 in Huangpu town, Haizhu District, Guangzhou, Guangdong, China.
  76. """
  77. anything = Star(Any())
  78. place = Plus(Pos("NNP") + Question(Token(",")))
  79. return Subject + Token("was born") + Pos("IN") + Object + Pos("IN") + place + anything
  80. @rule(True)
  81. def just_born(Subject, Object):
  82. """
  83. Ex: Lyle Eugene Hollister, born 6 July 1923 in Sioux Falls, South Dakota, enlisted in the Navy....
  84. """
  85. anything = Star(Any())
  86. return Subject + Token(", born") + Object + anything
  87. ## NEGATIVE RULES ##
  88. @rule(False, priority=1)
  89. def incorrect_labeling_of_place_as_person(Subject, Object):
  90. """
  91. Ex: Sophie Christiane of Wolfstein (24 October 24, 1667 - 23 August 1737)
  92. Wolfstein is a *place*, not a *person*
  93. """
  94. anything = Star(Any())
  95. person = Plus(Pos("NNP") + Question(Token(",")))
  96. return anything + person + Token("of") + Subject + anything