2013-12-13 2 views
3

나는 이와 같은 데이터의 목록이 큰 파일이 :정규식 첫 경기와 마지막 단어 나 단어

Terrific Theo Walcott is still shit, watch Rafa and Johnny deal with him on Saturday. 
its not that I'm a GSP fan, fabulous 
Iranian general says Israel's Iron Dome can't deal with their missiles 
with J Davlar 11th. Main rivals are team Poland. 
:

#fabulous  7.526 2301 2 
#excellent  7.247 2612 3 
#superb 7.199 1660 2 
#perfection  7.099 3004 4 
#terrific  6.922 629  1 

이 같은 문장의 목록이 포함 된 파일이 모든 문장의 첫 단어가 파일에서 단어와 일치

  1. 경우 :

    나는 다음과 같은 정규식 확인하려면 파일에 발생하거나하지

  2. 경우는 문장의 마지막 단어가 파일 예에서 단어 일치와예, 좋아요, 경우의은,이란은 토요일, 멋진, 미사일하면, 폴란드는 파일에서 발생 여부

  3. 문장의 개별 단어 접두사와 접미사가 2 자 또는 3자인 경우 Ter, its, Ira, wi가 2 ~ 3 자의 단어 접두어와 파일 또는 아닙니다. 접미어에도 동일하게 적용됩니다.

는 나는이 방법을 생각할 수 정규식 너무 새로운 오전하지만 결과 못하고 : term2.lower은() 파일의 첫 번째 열입니다

wordanalysis["trail"] = found if re.match(sentence[-1],term2.lower()) else not(found) 
    wordanalysis["lead"] = found if re.match(sentence[0],term2.lower()) else not(found) 
+0

안녕하세요 @ r3mus 제 편집을 확인하십시오 – fscore

+0

첫 단어가 파일의 단어 목록과 일치하는지 확인하고 싶습니다. 왜 그게 잘못된거야? 나는 일하고있다. – fscore

+0

@ r3mus aah 죄송합니다. 네, 맞습니다. 예제를 위해 제 편집을 확인하십시오. – fscore

답변

3

업데이트 : @justhalf의 멋진 제안에 따라 단어를 나눌 때 정규식을 사용할 필요가 없습니다. 대/소문자를 구분하려면 .lower()을 제거하십시오.

(^\s?\w+\b|(\b\w+)[\.?!\s]*$)

일치 :

MATCH 1-1. Terrific 
MATCH 2-1. Saturday. 
     2. Saturday 
MATCH 3-1. its 
MATCH 4-1. fabulous 
     2. fabulous 
MATCH 5-1. Iranian 
MATCH 6-1. missiles 
     2. missiles 
MATCH 7-1. with 
MATCH 8-1. Poland. 
     2. Poland 

구현

이 데이터 목록의 첫 번째 단어 (공백 구두점 제외 또는 후행) 마지막 말과 일치합니다 :

import re, string 

sentences = open("sentences.txt").read().splitlines() 
data = open("data.txt").read() 
pattern = re.compile(r"(^\s?\w+\b|(\b\w+)[\.?!\s]*$)") 
for line in sentences: 
    words = line.strip().split() 
    first = words[0].lower() 
    last = words[-1].translate(None, string.punctuation).lower() 
    if (re.search(first, data, re.I)): 
     print "Found " + first + " in data.txt" 
    if (re.search(last, data, re.I)): 
     print "Found " + last + " in data.txt" 

이것은 아마도 가장 우아한 방법은 아니지만 아이디어를 얻을 수 있습니다.

코드를 테스트 및 작동되고, 출력은 다음과 같습니다이 세번째 기준을 달성하지 않습니다 또한

Found Terrific in data.txt 
Found fabulous in data.txt 

는이를 테스트하고 지금까지 당신을 위해 일하고 있는지 확인합니다.

+1

왜 처음과 마지막 단어를 얻으려면 정규식이 필요합니까? 'words = line.strip() '과 같이 공백을 기반으로 분할 할 수 있습니다.스플릿(); 첫째, 마지막 = 단어 [0], 단어 [-1]' – justhalf

+0

@justhalf 좋은 점, 업데이트 및 문장 부호 수용. – brandonscript

+0

어떻게 data.txt의 두 번째 열을 가져 옵니까? – fscore