سؤال

أنا جديد على لغة Python ولا أستطيع إيجاد طريقة لإزالة النص غير المفيد.الغرض الرئيسي هو الاحتفاظ بالكلمة التي أريدها وإزالة كل ما تبقى.في هذه المرحلة، يمكنني التحقق من بلدي in_data والعثور على الكلمة التي أريدها.لو الجملة. البحث عن (wordToCheck) إيجابية، ثم احتفظ بها.ال in_data هي جملة في كل صف، ولكن الناتج الحالي هو كلمة في كل سطر.ما أريده هو الاحتفاظ بالتنسيقات، والعثور على الكلمة في كل صف وإزالة الباقي.

import Orange
import orange

word = ['roaming','overseas','samsung']
out_data = []

for i in range(len(in_data)):
    for j in range(len(word)):
        sentence = str(in_data[i][0])
        wordToCheck = word[j]
        if(sentence.find(wordToCheck) >= 0):
            print wordToCheck

انتاج

roaming
overseas
roaming
overseas
roaming
overseas
samsung
samsung

ال in_data الجملة مثل

contacted vodafone about going overseas and asked about roaming charges. The customer support officer says there isn't a charge but while checking my usage overseas.

أتوقع أن أرى الإخراج مثل

overseas roaming overseas
هل كانت مفيدة؟

المحلول

يمكنك استخدام regex لهذا:

>>> import re
>>> word = ['roaming','overseas','samsung']
>>> s =  "Contacted vodafone about going overseas and asked about roaming charges. The customer support officer says there isn't a charge but while checking my usage overseas."
>>> pattern = r'|'.join(map(re.escape, word))
>>> re.findall(pattern, s)
['overseas', 'roaming', 'overseas']
>>> ' '.join(_)
'overseas roaming overseas'

سيكون النهج غير العادي هو الاستخدام str.join مع str.strip وتعبير المولد.مطلوب استدعاء strip() للتخلص من علامات الترقيم مثل '.', ',' إلخ.

>>> from string import punctuation
>>> ' '.join(y for y in (x.strip(punctuation) for x in s.split()) if y in word)
'overseas roaming overseas'

نصائح أخرى

هنا طريقة أبسط:

giveacodicetagpre.

يمكنك القيام بذلك بشكل أسهل بكثير، مثل هذا:

for w in in_data.split():
    if w in word:
        print w

هنا قمنا أولاً بتقسيم in_data بواسطة مسافات، والتي تقوم بإرجاع قائمة من الكلمات.نقوم بعد ذلك بمراجعة كل كلمة في البيانات الواردة والتحقق مما إذا كانت الكلمة تساوي إحدى الكلمات التي تبحث عنها.إذا كان كذلك، فإننا نطبعه.

وللحصول على بحث أسرع، قم بإجراء word-أدرج مجموعة بدلاً من ذلك.أسرع بكثير.

بالإضافة إلى ذلك، إذا كنت تريد التعامل مع علامات الترقيم والرموز، فأنت بحاجة إما إلى استخدام التعبير العادي أو التحقق مما إذا كانت جميع الأحرف في السلسلة عبارة عن حرف.لذلك، للحصول على الإخراج الذي تريده:

import string
in_words = ('roaming','overseas','samsung')
out_words = []

for w in in_data.split():
    w = "".join([c for c in w if c in string.letters])
    if w in in_words:
        out_words.append(w)
" ".join(out_words)

إجابة باستخدام تقسيم ستسقط على علامات الترقيم.تحتاج إلى تفكيك الكلمات مع تعبير منتظم.

giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top