2016-07-12 5 views
1

그래서 저는 반 직관적 인 상황에 처해 있습니다. 대부분은 일부 정규식에 대한 패턴으로 추출 된 문자열을 사용하여 일부 문자열 일치를 수행하고 있습니다. 가끔 퍼지 정규 표현식을 사용하여이 작업을 수행 할 수 있지만 일반적으로이 상황에 부합합니다.Regex - 텍스트의 부분 문자열을 패턴의 부분 문자열과 일치시킵니다.

일부 데이터 (파이썬 정규식 패키지)에서 다음 패턴을 추출했다고 가정 해 봅시다.

pattern = 'the quick brown fox jumps over the lazy dog' 

이제는 대부분 첫 번째 것이지만 둘 중 하나처럼 보일 수있는 문자열과 일치시켜야합니다.

if re.search("("+pattern+"){e<=2}", string): 
    print(True) 
: 나는 시도하고 나는 현재 이런 식으로 뭔가를 보이는, 뭘했는지 뭔가를 할 경우 때문에 시작과 후행 문자

string = 'quick brown fox jumps over the lazy' 
string2 = 'and then a quick brown fox jumps onto the cat' 

은, 분명히 나는 ​​성냥을받지 않습니다

불행히도 오류 수는 일정하지 않으며 패턴을 앞뒤로 보내는 많은 문자가있을 수 있습니다. 모르겠다. 선험적으로이 문제가 생기면 패턴의 충분한 부분 문자열이 일치하면 일치하는 것을 얻을 수 있습니까? Levenshtein distance를 고려해 보았지만 길이에 따라 정규화 된 문자열의 길이에 민감하게 반응하는 임계 값을 설정해야합니다. 내가 원하면 시합을 해. 거기에 다른 옵션이나 결과를 정상화하는 더 나은 방법이 있습니까?

또한 내가 할 수없는 한 가지는 적절한 텍스트가 실제로 확인중인 텍스트에 나타나지 않기 때문에 항상 최상의 일치를 취하는 것입니다.

내가 도와 줄 수있는 정규식 패키지에서 놓친 부분이 있습니까?

+0

'nltk'을 확인 했습니까? 문자열에서 단어 줄기 빈도 (전체 단어 빈도를 기반으로 한 가중치)를 비교하고 최상의 일치를 반환하려는 것처럼 들립니다. 나는'nltk'이 그것을지지한다고 생각합니다. http://textminingonline.com/dive-into-nltk-part-iv-stemming-and-lemmatization – dashiell

+0

* 패턴의 충분한 부분 문자열은 무엇입니까? 그것은 보통 당신 자신을 계산하고 Levenstein 거리 함수와 함께 사용해야하는 가치입니다. –

+0

'string = '와 같이 인터리브 된 단어는 어떨까요? blah blah brown blah fox blah blog 점프 블로흐 이상한 점프'? – dawg

답변

0

Ouf는 저에게이 함께하는 아주 약간의 시간 (나는 파이썬 개발자 아니에요)했다,하지만이 트릭해야한다 : 여기 테스트

import re 

sentence = "the quick brown fox jumps over the lazy dog" 
string = 'quick brown fox jumps over the lazy' 
string2 = 'and then a quick brown fox jumps onto the cat' 
count1 = 0 
count2 = 0 


pattern = re.sub(
    '(\w+\s*)', 
    '\\1|', 
    sentence 
) 

pattern ="(?:(?!" + pattern.rstrip("|") + ").|" + re.sub(
    '(\w+\s*)', 
    '(\\1){0,1}', 
    sentence 
) + ")+" 

results = re.match(
    pattern, 
    string 
) 

total = len(results.groups()) 

for index in range(1, total): 

    if results.group(index): 
     count1 = count1 + 1 

results = re.match(
    pattern, 
    string2 
) 

for index in range(1, total): 

    if results.group(index): 
     count2 = count2 + 1 

message = 'The following string:"' + string + '" matched ' + str(count1) + ' time and the following string:"' + string + '" matched ' + str(count2) + ' time.' 

: http://www.pythontutor.com/visualize.html#mode=edit

enter image description here

관련 문제