2016-02-17 13 views
5

Đối với mỗi từ mục tiêu, tôi muốn kiểm tra xem các từ tiếp theo xuất hiện trước từ mục tiêu tiếp theo có tương ứng với những gì tôi đã đặt trong tài liệu hay không. Nếu khớp, tôi muốn nó xuất thành true và ghi ra tệp txt. Nếu sai, viết sai.Từ đích đối sánh python

Tôi đang sử dụng regex, nhưng lặp đi lặp lại cách là tốt

import re 
re.findall("([a-zA-Z]+) " + tofind, txt) 

Target và những lời tiếp theo:

target word: document 
next words: set is complete 

mẫu Đốc:

tài liệu mà tôi đặt hoàn tất tại . Tài liệu là tập hợp tuyệt vời. Tài liệu là bộ tài liệu hoàn chỉnh hoàn chỉnh. Tài liệu là tài liệu hoàn chỉnh là tốt nhưng không hoàn chỉnh.

Document xuất hiện 6 lần trong đoạn trích này, nhưng tôi muốn nó trở lại và sản lượng dưới đây để file txt

first document -> true 
second document -> false 
third document -> false 
fourth document -> true 
fifth document -> false 
sixth document -> false 

Trả lời

0

Không sử dụng biểu thức thông thường cho nhiệm vụ này, thay vào đó, chuỗi nối sẽ đủ rồi. Một ví dụ về cách đơn giản:

sampleDoc = "Document that I set is complete now. Document is great set. Is document is great complete document set is complete. Document is complete document is good but not complete.".lower() 
findWord = "document".lower() 
wordToFind = "set is complete".lower() 
splitList = sampleDoc.split(findWord) 
splitList.pop(0) 
for position,phrase in enumerate(splitList): 
    if wordToFind in phrase: 
     print("Document Number", str(position+1), "-> true") 
    else: 
     print("Document Number", str(position+1), "-> false") 

Chúng tôi chia văn bản trên mọi từ mà chúng tôi đang cố gắng tìm, gửi nó vào danh sách. Chúng tôi lặp qua danh sách này và nếu các từ quan trọng được tìm thấy, chúng tôi xuất ra đúng, hoặc nếu không, chúng tôi sẽ xuất sai.

+0

@GarrettR Thats upsetting. Tôi vừa mới tạo ra các từ và rất nhiều trong số chúng thực sự vô dụng. Tôi đã cập nhật để sử dụng nhiều tên biến hợp lý hơn. (Cả hai phiên bản cũ và mới đều hoạt động trên Python của tôi, vì vậy hãy cho tôi biết nếu phiên bản này cũng không hoạt động). –

0

Một giải pháp với regex để đảm bảo có ranh giới từ đó những lời không phải là một phần của Nói cách khác (pre thiết, tại adays, tài liệu ary):

import re 

text='Document that I set is complete now. Document is great set. Is document is great complete document set is complete. Document is complete document is good but not complete.' 

target='document' 
nextwords='set is complete' 

spat = re.compile(r'\b{}\b'.format(re.escape(target)), re.I) 
mpat = re.compile(r'\b{}\b'.format(re.escape(nextwords)), re.I) 

result = [True if (mpat.search(x)) else False for x in spat.split(text)[1:]] 
print(result) 

Rõ ràng nếu targetnextwords bắt đầu và kết thúc bằng các ký tự không phải từ, bạn cần phải thay thế các ranh giới từ bằng các thuật toán.

0

Bạn có thể sử dụng chỉ số sao của tất cả sự xuất hiện của document 's và kết thúc chỉ mục của set is complete' s sử dụng startend thuộc tính của các đối tượng phù hợp. Và nhận được các kết quả mong đợi bằng cách kiểm tra xem chỉ mục cuối cùng của từ tiếp theo là giữa một trong các cặp liên tục của số document s.

>>> all_targets_start = [g.start() for g in re.finditer(r'document', s, re.I)] 
>>> all_nextw_end = [g.end() for g in re.finditer(r'set is complete', s, re.I)] 
>>> 
>>> [True if any(i<k<j for k in all_nextw_end) else False for i,j in zip(all_targets_start, all_targets_start[1:])] 
[True, False, False, True, False] 
Các vấn đề liên quan