내가 올바르게 질문을 이해한다면, 한 가지 해결책은 다음 단어 토큰을 살펴보고 bigram이 목록에 있는지 확인하는 것입니다. 전화했을 때
import re
import string
regex_pattern = re.compile("([%s \n])" % string.punctuation)
def find_next_word(tokens, idx):
nonword = string.punctuation + " \n"
for i in range(idx+1, len(tokens)):
if tokens[i] not in nonword:
return (tokens[i], i)
return (None, -1)
def highlighter(content, terms, bigrams):
tokens = regex_pattern.split(content)
idx = 0
while idx < len(tokens):
token = tokens[idx]
(next_word, nw_idx) = find_next_word(tokens, idx)
if token.lower() in terms:
print('*' + token + '*', end="")
idx += 1
elif next_word and (token.lower(), next_word.lower()) in bigrams:
concat = "".join(tokens[idx:nw_idx+1])
print('-' + concat + '-', end="")
idx = nw_idx + 1
else:
print(token, end="")
idx += 1
terms = ['man', 'the']
bigrams = [('once', 'upon'), ('i','was')]
text = 'Once upon a time, as I was walking to the city, I met a man. As I was tired, I did not look once... upon this man.'
highlighter(text, terms, bigrams)
,이 제공 :
-Once upon- a time, as -I was- walking to *the* city, I met a *man*. As -I was- tired, I did not look -once... upon- this *man*.
가 있다는 점 유의 하시길 바랍니다 :
- 이 욕심 알고리즘은, 그것이 발견되는 첫 번째 음절과 일치합니다. 예를 들어
yellow banana
과 banana boat
을 확인하면 yellow banana boat
은 항상 -yellow banana- boat
으로 강조 표시됩니다. 다른 동작을 원할 경우 테스트 로직을 업데이트해야합니다.
- 아마 당신은 또한 단어
terms
모두 내가 모든 가장자리 케이스를 테스트하지 않은 음절
- 의 첫 번째 부분 인 경우를 관리하는 논리를 업데이트 할 깰 수있는 몇 가지/울타리가있을 수 있습니다 하여 필요한 경우 성능을 최적화 할 수
- 자격증 신청인 오류
: 단어는 다음 단어에 대한 예견을하기 전에 그 안에있는 경우 음절의 첫 번째 단어 목록을 구축하고 확인
- 및/또는 룩 어 헤드 (look-ahead)의 결과를 사용하여 두 단어 사이의 모든 비 단어 토큰을 한 단계에서 처리한다 즉이 도움이
희망 (이 단계를 구현하는 선형 성능을 보장하기에 충분해야한다).
'하이 라이터'기능이 예상대로 작동하고 * 예상대로 작동하지 않는 경우의 예를 제공 할 수 있습니까? 힌트 : "연속적으로 나타나는 단어"는 당신에게 어떻게 보이나요? – blacksite
먼저 텍스트를 목록으로 분할 한 다음 해당 목록을 반복 할 수 있습니다 (이미했던 것처럼). 그런 다음 해당 목록을 살펴보고 현재 요소와 다음 요소가 유효한 bigram인지 확인합니다. 그렇다면 "강조 표시된"단어를 별도의 목록으로 푸시합니다. 그렇지 않으면 목록에 "강조 표시되지 않음"을 넣습니다. 이전 bigram이 이미 (새 목록의) 현재 항목을 강조 표시했는지 항상 확인하십시오. –
@not_a_robot 그는 아마도 두 단어를 연속으로 의미하는 단어 bigram을 찾고있을 것입니다. 그는 bigrams의 목록에있는 경우 단어의 부부를 강조 표시하려고합니다. 이로 인해 중복되는 문제가 발생합니다. –