আমি যখন পিডিএফ থেকে অনুলিপি করি বা একটি নথি মুদ্রণ করি তখন কেন `fi` লেখাটি কাটা যায়?


15

আমি যখন কোনও অ্যাডোব রিডার পিডিএফ ফাইল থেকে অনুলিপি করি

Define an operation

আমি বরং দেখতে

Dene an operation

আমি যখন টেক্সটটি পেস্ট করব, এটি কেন?

আমি কীভাবে এই বিরক্তিকর সমস্যার প্রতিকার করতে পারি?

আমি আমার প্রিন্টারে একটি মাইক্রোসফ্ট অফিস ওয়ার্ড ফাইল প্রিন্ট করার সময়ও এই ঘটনাটি দেখেছি।

উত্তর:


13

এটি একটি হরফ ইস্যুর মতো শোনাচ্ছে। পিডিএফ সম্ভবত শব্দটিতে ওপেনটাইপ fi লিগচার ব্যবহার করছে defineএবং গন্তব্য অ্যাপ্লিকেশনটির বর্তমান ফন্টটি সেই গ্লাইফটি অনুপস্থিত।

অ্যাক্রোব্যাটকে অনুলিপিটির লিগচারটি পচে যাওয়ার কোনও সহজ উপায় আছে কিনা তা আমি জানি না।

মুদ্রণের ক্ষেত্রে আপনার সমস্যাগুলি সম্ভবত হরফ-সম্পর্কিত। কিছু হ'ল সম্ভবত মুদ্রকটিকে তার নিজস্ব বিল্ট-ইন ফন্টগুলির সাথে নথির ফন্টটি প্রতিস্থাপনের অনুমতি দিচ্ছে এবং ফন্টের প্রিন্টারের সংস্করণটিও সেই নির্দিষ্ট গ্লাইফটি অনুপস্থিত। এই সমস্যাটি সমাধানের জন্য আপনাকে উইন্ডোজকে সর্বদা প্রিন্টারে ফন্ট ডাউনলোড করতে বলতে হবে।

মুদ্রণের সময় আর একটি সম্ভাবনা: ইউনস্ক্রাইব সক্ষম নাও হতে পারে। এমএস কেবি 2642020 এ সম্পর্কে এবং কিছু সম্ভাব্য কাজের দিকগুলি (যেমন, ইএমএফ টাইপ প্রিন্টিংয়ের পরিবর্তে আরএডাব্লু টাইপ প্রিন্টিং ব্যবহার করার জন্য) সম্পর্কে আলোচনা করে। আপনার নির্দিষ্ট সমস্যার তুলনায় প্রসঙ্গটি কিছুটা আলাদা হলেও কারণটি একই হতে পারে এবং একই কাজের ক্ষেত্র প্রয়োগ হতে পারে।


1
লিগচারগুলি সম্পর্কে আকর্ষণীয়, আমি অবাক হয়েছি যদি এটি কোনওভাবে সঠিকভাবে আচরণ করার জন্য কনফিগার করা যায়। অন্যান্য পিডিএফ পাঠকরা কীভাবে আচরণ করে তা আমি দেখতে পেতাম। হরফগুলি প্রিন্টারে প্রেরণ করা যায় তাই আমি এটি ঠিক কোথায় কনফিগার করব?
তামারা উইজসম্যান

1
কোনও অ্যাপের মুদ্রণ ডায়ালগ থেকে: প্রিন্টারের জন্য ক্লিক করুন Properties(বা Preferences, ডায়ালগ সংস্করণের উপর নির্ভর করে) আপনি Layoutবা Qualityট্যাবগুলিতে রয়েছেন তা নিশ্চিত করুন, Advancedবোতামটি ক্লিক করুন । ইন Graphicগ্রুপ, পরিবর্তন TrueType Fontকরার অপশন Download as Softfont। এটি বেশিরভাগ পোস্টস্ক্রিপ্ট প্রিন্টার এবং প্রিন্টারগুলিতে উইন্ডোজ অন্তর্নির্মিত ডায়লগগুলি (আমার মনে হয়) ব্যবহার করে coversেকে রাখে, তবে অন্যান্য ড্রাইভারগুলিতে জিনিসগুলি প্রায় সরানো হতে পারে, বা ফ্ল্যাট হারিয়ে নাও থাকতে পারে।
আফরাজায়

আপনি কিছু ব্যবহারের এমএস কেবি 2642020 খুঁজে পেতে পারেন। আমি সেই তথ্য দিয়ে আমার উত্তর সম্পাদনা করেছি।
আফরাজায়

সমস্যা বর্ণনা করার জন্য ধন্যবাদ। আমি এখনও এটি সমাধান করার চেষ্টা করি নি তবে আবার যখন মুদ্রণের সমস্যার মুখোমুখি হই তখন অবশ্যই চেষ্টা করব। আমার ধারণা, উভয় সমাধানের মধ্যে একটিই এই খুব নির্দিষ্ট সমস্যাটিকে অবশ্যই সমাধান করবে ... :)
তামারা উইজসম্যান

@ আফ্রাজিয়ার, আপনি আপনার মন্তব্যে যে সমাধানটি লিখেছেন তা "একটি অ্যাপের মুদ্রণ কথোপকথন থেকে:" আমার পক্ষে কাজ করেছে। আমি এই উত্তরটি আপনার উত্তরে রাখার পরামর্শ দিচ্ছি। (আমি এটি সম্পাদনা করতে পারলাম, তবে আমি মনে করি সিদ্ধান্তটি আপনার উচিত))
অ্যালান

9

আপনি এই "ভাঙ্গা" শব্দের বেশিরভাগটি মূলের সাথে প্রতিস্থাপন করতে পারেন। আপনি নিরাপদে কোনও শব্দ প্রতিস্থাপন করতে পারেন যদি:

  • মত deneবা rey, এটি একটি সত্য শব্দ নয়
  • মত defineবা firefly, আছে এক (পথ পুনরায় অ্যাড পটীবন্ধনী sequeneces করতে ff, fi, fl, ffi, অথবা ffl) এবং একটি বাস্তব শব্দের করা

বেশিরভাগ লিগচার সমস্যা এই মানদণ্ডে ফিট করে। তবে, আপনি প্রতিস্থাপন করতে পারবেন না:

  • us কারণ এটি একটি আসল শব্দ, যদিও এটি মূলত হতে পারে fluffs
    • এছাড়াও affirm, butterfly, fielders, fortifies, flimflam, misfits...
  • cusকারণ এটি হয়ে যেতে পারে cuffsবা হয়ficus
    • এছাড়াও stiffed/ stifled, rifle/ riffle, flung/ fluffing...

ইন এই 496 হাজার শব্দটি ইংরেজি অভিধান , আছে 16055 শব্দ ধারণ অন্তত একটি ff, fi, fl, ffi, অথবা ffl, যা পরিণত 15879 শব্দ যখন তাদের ligatures সরিয়ে ফেলা হয়। 173 মত মুখোমুখি সংঘর্ষ হয় সেই অনুপস্থিত শব্দের cuffsএবং ficus, এবং শেষ 3 কারণ যে অভিধান শব্দ আছে ff, fiএবং fl

এই "লিগ্রেশন-মুছে ফেলা" শব্দগুলির মধ্যে 790 টি আসল শব্দ, যেমন us, তবে 15089 ভাঙা শব্দ। 14960 ভাঙা শব্দের মূল শব্দের সাথে নিরাপদে প্রতিস্থাপন করা যেতে পারে, যার অর্থ ভাঙা শব্দের 99.1% স্থিরযোগ্য এবং একটি লিপিচার থাকা মূল শব্দগুলির 93.3% একটি পিডিএফ অনুলিপি-পেস্ট করার পরে পুনরুদ্ধার করা যেতে পারে। লিগচার সিকোয়েন্স যুক্ত of.৮ % শব্দ সংঘর্ষে ( cus) এবং উপ-শব্দের ( us) -র কাছে হারিয়ে গেছে , যদি আপনি কোনও গ্যারান্টিযুক্ত না থাকে এমন প্রতিটি শব্দের জন্য সেরা প্রতিস্থাপন বেছে নিতে কোনও উপায় (শব্দ / নথি প্রসঙ্গে?) না বেছে নেন প্রতিস্থাপন।

নীচে আমার পাইথন স্ক্রিপ্ট যা উপরের পরিসংখ্যানগুলি তৈরি করেছে। এটি প্রতি লাইনে একটি শব্দের সাথে একটি অভিধান পাঠ্য ফাইল প্রত্যাশা করে। শেষে এটি একটি সিএসভি ফাইল লিখেছে যা স্থিরযোগ্য ভাঙা শব্দগুলিকে তাদের মূল শব্দগুলিতে মানচিত্র করে।

সিএসভি ডাউনলোডের জন্য এখানে একটি লিঙ্ক রয়েছে: http://www.filedropper.com/brokenligaturewordfixes বেশিরভাগ ভাঙা শব্দের প্রতিস্থাপনের জন্য এই ম্যাপিংটিকে একটি রেজেক্স রিপ্লেসমেন্ট স্ক্রিপ্টের মতো একত্রিত করুন

import csv
import itertools
import operator
import re


dictionary_file_path = 'dictionary.txt'
broken_word_fixes_file_path = 'broken_word_fixes.csv'
ligatures = 'ffi', 'ffl', 'ff', 'fi', 'fl'


with open(dictionary_file_path, 'r') as dictionary_file:
    dictionary_words = list(set(line.strip()
                                for line in dictionary_file.readlines()))


broken_word_fixes = {}
ligature_words = set()
ligature_removed_words = set()
broken_words = set()
multi_ligature_words = set()


# Find broken word fixes for words with one ligature sequence
# Example: "dene" --> "define"
words_and_ligatures = list(itertools.product(dictionary_words, ligatures))
for i, (word, ligature) in enumerate(words_and_ligatures):
    if i % 50000 == 0:
        print('1-ligature words {percent:.3g}% complete'
              .format(percent=100 * i / len(words_and_ligatures)))
    for ligature_match in re.finditer(ligature, word):
        if word in ligature_words:
            multi_ligature_words.add(word)
        ligature_words.add(word)
        if word == ligature:
            break
        # Skip words that contain a larger ligature
        if (('ffi' in word and ligature != 'ffi') or
                ('ffl' in word and ligature != 'ffl')):
            break
        # Replace ligatures with dots to avoid creating new ligatures
        # Example: "offline" --> "of.ine" to avoid creating "fi"
        ligature_removed_word = (word[:ligature_match.start()] +
                                 '.' +
                                 word[ligature_match.end():])
        # Skip words that contain another ligature
        if any(ligature in ligature_removed_word for ligature in ligatures):
            continue
        ligature_removed_word = ligature_removed_word.replace('.', '')
        ligature_removed_words.add(ligature_removed_word)
        if ligature_removed_word not in dictionary_words:
            broken_word = ligature_removed_word
            broken_words.add(broken_word)
            if broken_word not in broken_word_fixes:
                broken_word_fixes[broken_word] = word
            else:
                # Ignore broken words with multiple possible fixes
                # Example: "cus" --> "cuffs" or "ficus"
                broken_word_fixes[broken_word] = None


# Find broken word fixes for word with multiple ligature sequences
# Example: "rey" --> "firefly"
multi_ligature_words = sorted(multi_ligature_words)
numbers_of_ligatures_in_word = 2, 3
for number_of_ligatures_in_word in numbers_of_ligatures_in_word:
    ligature_lists = itertools.combinations_with_replacement(
        ligatures, r=number_of_ligatures_in_word
    )
    words_and_ligature_lists = list(itertools.product(
        multi_ligature_words, ligature_lists
    ))
    for i, (word, ligature_list) in enumerate(words_and_ligature_lists):
        if i % 1000 == 0:
            print('{n}-ligature words {percent:.3g}% complete'
                  .format(n=number_of_ligatures_in_word,
                          percent=100 * i / len(words_and_ligature_lists)))
        # Skip words that contain a larger ligature
        if (('ffi' in word and 'ffi' not in ligature_list) or
                ('ffl' in word and 'ffl' not in ligature_list)):
            continue
        ligature_removed_word = word
        for ligature in ligature_list:
            ligature_matches = list(re.finditer(ligature, ligature_removed_word))
            if not ligature_matches:
                break
            ligature_match = ligature_matches[0]
            # Replace ligatures with dots to avoid creating new ligatures
            # Example: "offline" --> "of.ine" to avoid creating "fi"
            ligature_removed_word = (
                ligature_removed_word[:ligature_match.start()] +
                '.' +
                ligature_removed_word[ligature_match.end():]
            )
        else:
            # Skip words that contain another ligature
            if any(ligature in ligature_removed_word for ligature in ligatures):
                continue
            ligature_removed_word = ligature_removed_word.replace('.', '')
            ligature_removed_words.add(ligature_removed_word)
            if ligature_removed_word not in dictionary_words:
                broken_word = ligature_removed_word
                broken_words.add(broken_word)
                if broken_word not in broken_word_fixes:
                    broken_word_fixes[broken_word] = word
                else:
                    # Ignore broken words with multiple possible fixes
                    # Example: "ung" --> "flung" or "fluffing"
                    broken_word_fixes[broken_word] = None


# Remove broken words with multiple possible fixes
for broken_word, fixed_word in broken_word_fixes.copy().items():
    if not fixed_word:
        broken_word_fixes.pop(broken_word)


number_of_ligature_words = len(ligature_words)
number_of_ligature_removed_words = len(ligature_removed_words)
number_of_broken_words = len(broken_words)
number_of_fixable_broken_words = len(
    [word for word in set(broken_word_fixes.keys())
     if word and broken_word_fixes[word]]
)
number_of_recoverable_ligature_words = len(
    [word for word in set(broken_word_fixes.values())
     if word]
)
print(number_of_ligature_words, 'ligature words')
print(number_of_ligature_removed_words, 'ligature-removed words')
print(number_of_broken_words, 'broken words')
print(number_of_fixable_broken_words,
      'fixable broken words ({percent:.3g}% fixable)'
      .format(percent=(
      100 * number_of_fixable_broken_words / number_of_broken_words
  )))
print(number_of_recoverable_ligature_words,
      'recoverable ligature words ({percent:.3g}% recoverable)'
      '(for at least one broken word)'
      .format(percent=(
          100 * number_of_recoverable_ligature_words / number_of_ligature_words
      )))


with open(broken_word_fixes_file_path, 'w+', newline='') as broken_word_fixes_file:
    csv_writer = csv.writer(broken_word_fixes_file)
    sorted_broken_word_fixes = sorted(broken_word_fixes.items(),
                                      key=operator.itemgetter(0))
    for broken_word, fixed_word in sorted_broken_word_fixes:
        csv_writer.writerow([broken_word, fixed_word])

এর লিঙ্কটি নষ্ট .csvহয়ে গেছে। আপনি যদি আবার এটি আপলোড করতে পারেন তবে তা দুর্দান্ত হবে! যাই হোক না কেন, কোডের জন্য ধন্যবাদ।
ম্যাগটুন

@ এ্যানোরা আমি একই লিঙ্কটিতে পুনরায় আপলোড করেছি - আশা করি এটি সাহায্য করবে! কোড / ফলাফলগুলিতেও আমি কয়েকটি সমস্যা লক্ষ্য করেছি (নতুন অভিধানের শব্দগুলিতে সময়সীমার সময় স্থানধারক হিসাবে পিরিয়ড ব্যবহার করা এবং শব্দগুলির সাথে তুলনা করার আগে শব্দগুলি ছোট করা নয়)। আমি বিশ্বাস করি যে প্রতিস্থাপনগুলির সবকটিই সঠিক, তবে এগুলিকে নুনের দানার সাথে নিয়ে যান এবং আরও ভাল প্রতিস্থাপন করা সম্ভব বলে জানেন। আমি রিজেক্সের সাথে প্রতিস্থাপনগুলি স্বয়ংক্রিয় করার প্রস্তাব দিই তবে প্রতিটি প্রতিস্থাপনের বিষয়টি নিশ্চিত করা আপনার নিজের চোখ দিয়ে ভাল।
জান ভ্যান ব্রুগেন

7

লিগাচার সহ অন্যান্য উত্তর নোটগুলির মতো এখানে সমস্যাটি রয়েছে । তবে ওপেনটাইপের সাথে এর কোনও যোগসূত্র নেই। মূল সমস্যাটি হ'ল পিডিএফগুলি একটি প্রিন্ট প্রিন্ট ফর্ম্যাট যা কেবল বিষয়বস্তু এবং শব্দার্থবিজ্ঞানের সাথে নিজেকে সামান্যই উদ্বেগিত করে তবে পরিবর্তে কোনও পৃষ্ঠাকে বিশ্বস্ততার সাথে উপস্থাপনের দিকে প্রস্তুত হয় কারণ এটি মুদ্রিত হবে।

পাঠ্যটি পাঠ্য হিসাবে নয় তবে নির্দিষ্ট অবস্থানে একটি ফন্ট থেকে গ্লাইফের রান হিসাবে রচনা করা হয়। সুতরাং আপনি কিছু পাবেন যেমন »প্লেস গ্লিফ নম্বর there২, গ্লিফ নম্বর 101 সেখানে, গ্লিফ নম্বর 108 সেখানে, ...«। যে পর্যায়ে সেখানে মৌলিকভাবে লেখার কোন ধারণা এ সব । এটি দেখতে দেখতে কেবল একটি বিবরণ । একগুচ্ছ গ্লাইফ থেকে অর্থ বের করার ক্ষেত্রে দুটি সমস্যা রয়েছে:

  1. স্থানিক বিন্যাস। যেহেতু পিডিএফটিতে ইতিমধ্যে নির্দিষ্ট তথ্য রয়েছে যেখানে প্রতিটি গ্লাইফ স্থাপন করা যায় সেখানে সাধারণ হিসাবে এটির অন্তর্নিহিত কোনও প্রকৃত পাঠ্য নেই। আরেকটি পার্শ্ব প্রতিক্রিয়া হ'ল কোনও জায়গা নেই। অবশ্যই, আপনি যদি পাঠ্যের দিকে লক্ষ্য করেন তবে পিডিএফটিতে নেই। আপনি যখন কোনও কিছুতেই নির্গত করতে পারছেন না কেন একটি ফাঁকা গিলিফ নির্গত করবেন? ফলাফল একই, সব পরে। সুতরাং পিডিএফ পাঠকদের সাবধানতার সাথে পাঠ্যটি আবার একসাথে টুকরো টুকরো করতে হবে, যখনই গ্লাইফগুলির মধ্যে বড় ব্যবধানের মুখোমুখি হয় তখন একটি স্থান সন্নিবেশ করতে হবে।

  2. পিডিএফ পাঠ্য নয়, গ্লাইফগুলি সরবরাহ করে। বেশিরভাগ সময় গ্লিফ আইডিগুলি এম্বেড করা ফন্টগুলিতে ইউনিকোড কোড পয়েন্ট বা কমপক্ষে ASCII কোডের সাথে মিল রাখে, যার অর্থ আপনি প্রায়শই প্রথম স্থানটিতে পিডিএফ তৈরি করেছেন তার উপর নির্ভর করে আপনি ASCII বা লাতিন 1 পাঠ্যকে যথেষ্ট ভালভাবে ফিরে পেতে পারেন (কিছু প্রক্রিয়া সমস্ত গার্বেল )। তবে প্রায়শই এমন পিডিএফও যেগুলি আপনাকে ASCII পাঠ্য বের করার অনুমতি দেয় কেবল ASCII নয় এমন সমস্ত কিছু ম্যাঙ্গাল করে দেবে । বিশেষ করে এই ধরনের আরবি যেমন জটিল স্ক্রিপ্টে যা ধারণ সঙ্গে ভয়ঙ্কর শুধুমাত্র লেআউট পর্যায় যার মানে আরবি PDF গুলি প্রায় প্রকৃত টেক্সট ধারণ কখনো পর ligatures এবং বিকল্প গ্লিফ

দ্বিতীয় সমস্যাটি আপনার মুখোমুখি হওয়ার মতো। এখানে একটি সাধারণ অপরাধী হ'ল লটেক্স যা এর আউটপুট অর্জনের জন্য আনুমানিক সংখ্যক 238982375 বিভিন্ন ফন্ট (যার প্রত্যেকটি 256 গ্লাইফের মধ্যে সীমাবদ্ধ) ব্যবহার করে। সাধারণ পাঠ্য, গণিত (একাধিক ব্যবহার করে) ইত্যাদির জন্য বিভিন্ন ফন্টগুলি বিষয়গুলিকে খুব কঠিন করে তোলে, বিশেষত মেটাফন্ট প্রায় দুই দশক পরে ইউনিকোডের পূর্বাভাস দেয় এবং এভাবে কোনও ইউনিকোড ম্যাপিং হয় নি। উমলৌতগুলি কোনও চিঠির উপরে ডায়রিসিস দ্বারা রেন্ডার করা হয়, যেমন আপনি পিডিএফ থেকে অনুলিপি করার সময় »ä« এর পরিবর্তে »¨a get পান (এবং অবশ্যই এটি অনুসন্ধানও করতে পারবেন না)।

পিডিএফ উত্পাদনকারী অ্যাপ্লিকেশনগুলি প্রকৃত পাঠ্যকে মেটাডেটা হিসাবে অন্তর্ভুক্ত করতে পারে। যদি তা না করে তবে এম্বেড করা ফন্টগুলি কীভাবে পরিচালনা করা হয় এবং পিডিএফ রিডারটি আবার মূল পাঠ্যকে একসাথে টুকরো টুকরো করতে পারে কি না তার রহমতে আপনাকে ছেড়ে দেওয়া হয়। কিন্তু »ফাই a ফাঁকা হিসাবে অনুলিপি করা বা একেবারেই না করা সাধারণত একটি ল্যাকেক্স পিডিএফের লক্ষণ। আপনার ইউনিকোড অক্ষরগুলিকে পাথরগুলিতে আঁকতে হবে এবং প্রযোজকের দিকে ফেলে দেওয়া উচিত, আশা করে তারা XeLaTeX এ চলে যাবে এবং শেষ পর্যন্ত 1990 এর দশকে অক্ষর এনকোডিং এবং ফন্টের মানগুলিতে পৌঁছে যাবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.