-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathWordPairExtractor.py
70 lines (52 loc) · 1.67 KB
/
WordPairExtractor.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Word-Pair Extraction
# 문장 단위로 연속되는 두개 토큰의 품사 태그를 조사한다.
# 사용자가 선택한 품사들과 일치하는 토큰 쌍을 추출한다.
from nltk import RegexpParser, tree
def run(posTaggedTokenListList, pos1, pos2):
retVal = ''
total = 0
# word pair 정규식을 정의한다.
regex = ('pattern: {<%s><%s>}' % (getPosTagRegex(pos1), getPosTagRegex(pos2)))
# 파서를 생성한다.
parser = RegexpParser(regex)
# 파싱한다.
for posTaggedTokenList in posTaggedTokenListList:
parsedTree = parser.parse(posTaggedTokenList)
for subtree in parsedTree:
if isinstance(subtree, tree.Tree):
retVal += (subtree[0][0] + " ")
retVal += (subtree[1][0] + "\r\n")
total += 1
retVal = (("total: %d\r\npos1: %s, pos2: %s\r\n\r\n" % (total, pos1, pos2)) + retVal)
return retVal
# 각 품사 별 태그 패턴을 정의한다.
def getPosTagRegex(posTag):
retVal = ""
# 명사
if posTag == "NOUN":
retVal = "NNPS|NNP|NNS|NN"
# 동사
elif posTag == "VERB":
retVal = "VBZ|VBP|VBN|VBG|VBD|VB|MD"
# 형용사
elif posTag == "ADJ":
retVal = "JJS|JJR|JJ"
# 부사
elif posTag == "ADV":
retVal = "WRB|RP|RBS|RBR|RB"
# 한정사
elif posTag == "DET":
retVal = "PDT|DT"
# 대명사
elif posTag == "PRON":
retVal = "WP$|WP|WDT|PRP$|PRP"
# 전치사
elif posTag == "PREP":
retVal = "TO"
# 접속사
elif posTag == "CONJ":
retVal = "IN|CC"
# 감탄사
elif posTag == "INT":
retVal = "UH"
return retVal